/*
 * ExerciseGeneratorGUI.java Created on 16. únor 2009, 13:48
 */

package cz.muni.fi.xkadlec6.bp;

import java.awt.Toolkit;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.filechooser.FileNameExtensionFilter;

/**
 * The class stands for the graphical user interface. This application generates the exercises for converting regular
 * languages representations among themselves
 * 
 * @author Jana Kadlecova
 */
@SuppressWarnings({ "rawtypes", "unchecked" })
public class ExerciseGeneratorGUI extends javax.swing.JFrame
{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	/**
	 * 
	 */

	// variables declaration
	private JPanel selectedPanel;
	private List<JPanel> panels;
	// set Toolkit to get informations about current screen
	final Toolkit t = Toolkit.getDefaultToolkit();
	final int MIN_WIDTH = 957;
	final int MIN_HEIGHT = 641;
	final int MAX_WIDTH = t.getScreenSize().width;
	final int MAX_HEIGHT = t.getScreenSize().height;
	private T1Generator t1;
	private T2Generator t2;
	private T0Generator t0;
	private T3Generator t3;

	/** Creates new form ExerciseGeneratorGUI */
	public ExerciseGeneratorGUI()
	{
		initComponents();
		panels = new ArrayList<JPanel>();
		panels.add(type0JPanel);
		panels.add(type1JPanel);
		panels.add(type2JPanel);
		panels.add(type3JPanel);
		// the panel must have the same number as the layer
		for (JPanel panel : panels)
		{
			panel.setVisible(false);
		}
		selectedPanel = type0JPanel;
		selectedPanel.setVisible(true);
		resizeFrame();
		// the position in the middle of the screen
		this.setLocation((t.getScreenSize().width / 2) - (this.getWidth() / 2), this.getY());
		// save, copy, save all, copy all buttons are disabled
		this.setButtonsEnabled(false);
		this.stopJButton.setEnabled(false);
		this.setGeneratingEnabled(false);
	}

	/**
	 * This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The
	 * content of this method is always regenerated by the Form Editor.
	 */
	// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
	private void initComponents()
	{

		type0Automaton1buttonGroup = new javax.swing.ButtonGroup();
		type0Automaton2buttonGroup = new javax.swing.ButtonGroup();
		typeJComboBox = new javax.swing.JComboBox();
		typeJLayeredPane = new javax.swing.JLayeredPane();
		type0JPanel = new javax.swing.JPanel();
		type0Automaton1JPanel = new javax.swing.JPanel();
		type0Automaton1StatesJLabel = new javax.swing.JLabel();
		type0Automaton1FinalStatesJLabel = new javax.swing.JLabel();
		type0Automaton1TransitionsJLabel = new javax.swing.JLabel();
		type0Automaton1AlphabetJLabel = new javax.swing.JLabel();
		type0Automaton1AlphabetMinJLabel = new javax.swing.JLabel();
		type0Automaton1StatesMinJLabel = new javax.swing.JLabel();
		type0Automaton1FinalStatesMinJLabel = new javax.swing.JLabel();
		type0Automaton1TransitionsMinJLabel = new javax.swing.JLabel();
		type0Automaton1AlphabetMinJTextField = new javax.swing.JTextField();
		type0Automaton1StatesMinJTextField = new javax.swing.JTextField();
		type0Automaton1FinalStatesMinJTextField = new javax.swing.JTextField();
		type0Automaton1TransitionsMinJTextField = new javax.swing.JTextField();
		type0Automaton1AlphabetMaxJLabel = new javax.swing.JLabel();
		type0Automaton1StatesMaxJLabel = new javax.swing.JLabel();
		type0Automaton1FinalStatesMaxJLabel = new javax.swing.JLabel();
		type0Automaton1TransitionsMaxJLabel = new javax.swing.JLabel();
		type0Automaton1AlphabetMaxJTextField = new javax.swing.JTextField();
		type0Automaton1StatesMaxJTextField = new javax.swing.JTextField();
		type0Automaton1FinalStatesMaxJTextField = new javax.swing.JTextField();
		type0Automaton1TransitionsMaxJTextField = new javax.swing.JTextField();
		type0AlphabetJComboBox = new javax.swing.JComboBox();
		type0Automaton1StatesJComboBox = new javax.swing.JComboBox();
		type0Automaton1TotalTransitionFunctionJCheckBox = new javax.swing.JCheckBox();
		type0Automaton2JPanel = new javax.swing.JPanel();
		type0Automaton2StatesMinJLabel = new javax.swing.JLabel();
		type0Automaton2FinalStatesMinJLabel = new javax.swing.JLabel();
		type0Automaton2TransitionsMinJLabel = new javax.swing.JLabel();
		type0Automaton2StatesMinJTextField = new javax.swing.JTextField();
		type0Automaton2FinalStatesMinJTextField = new javax.swing.JTextField();
		type0Automaton2TransitionsMinJTextField = new javax.swing.JTextField();
		type0Automaton2StatesMaxJLabel = new javax.swing.JLabel();
		type0Automaton2FinalStatesMaxJLabel = new javax.swing.JLabel();
		type0Automaton2TransitionsMaxJLabel = new javax.swing.JLabel();
		type0Automaton2StatesMaxJTextField = new javax.swing.JTextField();
		type0Automaton2FinalStatesMaxJTextField = new javax.swing.JTextField();
		type0Automaton2TransitionsMaxJTextField = new javax.swing.JTextField();
		type0Automaton2StatesJLabel = new javax.swing.JLabel();
		type0Automaton2FinalStatesJLabel = new javax.swing.JLabel();
		type0Automaton2TransitionsJLabel = new javax.swing.JLabel();
		type0Automaton2StatesJComboBox = new javax.swing.JComboBox();
		type0Automaton2TotalTransitionFunctionJCheckBox = new javax.swing.JCheckBox();
		type0OperationJPanel = new javax.swing.JPanel();
		type0Automaton1JRadioButton = new javax.swing.JRadioButton();
		type0Automaton1CoJRadioButton = new javax.swing.JRadioButton();
		type0Automaton2JRadioButton = new javax.swing.JRadioButton();
		type0Automaton2CoJRadioButton = new javax.swing.JRadioButton();
		type0OperationJComboBox = new javax.swing.JComboBox();
		type0OutputAutomatonJPanel = new javax.swing.JPanel();
		type0OutputAutomatonStatesJLabel = new javax.swing.JLabel();
		type0OutputAutomatonStatesMinJLabel = new javax.swing.JLabel();
		type0OutputAutomatonStatesMaxJLabel = new javax.swing.JLabel();
		type0OutputAutomatonStatesMinJTextField = new javax.swing.JTextField();
		type0OutputAutomatonStatesMaxJTextField = new javax.swing.JTextField();
		type0OutputAutomatonMinOneFinalStateJCheckBox = new javax.swing.JCheckBox();
		type0OutputAutomatonTransitionsJLabel = new javax.swing.JLabel();
		type0OutputAutomatonTransitionsMinJLabel = new javax.swing.JLabel();
		type0OutputAutomatonTransitionsMaxJLabel = new javax.swing.JLabel();
		type0OutputAutomatonTransitionsMinJTextField = new javax.swing.JTextField();
		type0OutputAutomatonTransitionsMaxJTextField = new javax.swing.JTextField();
		type1JPanel = new javax.swing.JPanel();
		type1InputAutomantonJPanel = new javax.swing.JPanel();
		type1InputAutomatonStatesJLabel = new javax.swing.JLabel();
		type1InputAutomatonFinalStatesJLabel = new javax.swing.JLabel();
		type1InputAutomatonTransitionsJLabel = new javax.swing.JLabel();
		type1InputAutomatonAlphabetJLabel = new javax.swing.JLabel();
		type1InputAutomatonStatesMinJLabel = new javax.swing.JLabel();
		type1InputAutomatonFinalStatesMinJLabel = new javax.swing.JLabel();
		type1InputAutomatonTransitionsMinJLabel = new javax.swing.JLabel();
		type1InputAutomatonAlphabetMinJLabel = new javax.swing.JLabel();
		type1InputAutomatonStatesMinJTextField = new javax.swing.JTextField();
		type1InputAutomatonFinalStatesMinJTextField = new javax.swing.JTextField();
		type1InputAutomatonTransitionsMinJTextField = new javax.swing.JTextField();
		type1InputAutomatonAlphabetMinJTextField = new javax.swing.JTextField();
		type1InputAutomatonStatesMaxJLabel = new javax.swing.JLabel();
		type1InputAutomatonFinalStatesMaxJLabel = new javax.swing.JLabel();
		type1InputAutomatonTransitionsMaxJLabel = new javax.swing.JLabel();
		type1InputAutomatonAlphabetMaxJLabel = new javax.swing.JLabel();
		type1InputAutomatonStatesMaxJTextField = new javax.swing.JTextField();
		type1InputAutomatonFinalStatesMaxJTextField = new javax.swing.JTextField();
		type1InputAutomatonTransitionsMaxJTextField = new javax.swing.JTextField();
		type1InputAutomatonAlphabetMaxJTextField = new javax.swing.JTextField();
		type1InputAutomatonAlphabetJComboBox = new javax.swing.JComboBox();
		type1InputAutomatonStatesJComboBox = new javax.swing.JComboBox();
		type1InputAutomatonFirstStateJCheckBox = new javax.swing.JCheckBox();
		type1InputAutomatonTotalTransitionFunctionJCheckBox = new javax.swing.JCheckBox();
		type1InputAutomatonUnreachableStates1JLabel = new javax.swing.JLabel();
		type1InputAutomatonUnreachableStates2jLabel = new javax.swing.JLabel();
		type1InputAutomatonUnreachableStatesMinJLabel = new javax.swing.JLabel();
		type1InputAutomatonUnreachableStatesMinJTextField = new javax.swing.JTextField();
		type1InputAutomatonUnreachableStatesMaxJLabel = new javax.swing.JLabel();
		type1InputAutomatonUnreachableStatesMaxJTextField = new javax.swing.JTextField();
		type1OutputAutomatonJPanel = new javax.swing.JPanel();
		type1OutputAutomatonStatesJLabel = new javax.swing.JLabel();
		type1OutputAutomatonStatesMinJLabel = new javax.swing.JLabel();
		type1OutputAutomatonStatesMinJTextField = new javax.swing.JTextField();
		type1OutputAutomatonStatesMaxJLabel = new javax.swing.JLabel();
		type1OutputAutomatonStatesMaxJTextField = new javax.swing.JTextField();
		type1OutputAutomatonTransitionsJLabel = new javax.swing.JLabel();
		type1OutputAutomatonTransitionsMinJLabel = new javax.swing.JLabel();
		type1OutputAutomatonTransitionsMaxJLabel = new javax.swing.JLabel();
		type1OutputAutomatonTransitionsMinJTextField = new javax.swing.JTextField();
		type1OutputAutomatonTransitionsMaxJTextField = new javax.swing.JTextField();
		type1MinimizationJPanel = new javax.swing.JPanel();
		type1MinimizationStepsJCheckBox = new javax.swing.JCheckBox();
		type1MinimizationStepsJLabel = new javax.swing.JLabel();
		type1MinimizationStepsMinJTextField = new javax.swing.JTextField();
		type1MinimizationStepsMinJLabel = new javax.swing.JLabel();
		type1MinimizationStepsMaxJLabel = new javax.swing.JLabel();
		type1MinimizationStepsMaxJTextField = new javax.swing.JTextField();
		type1OperationJPanel = new javax.swing.JPanel();
		type1OperationFromJLabel = new javax.swing.JLabel();
		type1OperationFromJComboBox = new javax.swing.JComboBox();
		type1OperationToJLabel = new javax.swing.JLabel();
		type1OperationToJComboBox = new javax.swing.JComboBox();
		type2JPanel = new javax.swing.JPanel();
		type2OperationJLabel = new javax.swing.JLabel();
		type2OperationJComboBox = new javax.swing.JComboBox();
		type2JLayeredPane = new javax.swing.JLayeredPane();
		type2InputGrammarJPanel = new javax.swing.JPanel();
		type2InputGrammarVariablesJLabel = new javax.swing.JLabel();
		type2InputGrammarRulesJLabel = new javax.swing.JLabel();
		type2InputGrammarVariablesMinJLabel = new javax.swing.JLabel();
		type2InputGrammarRulesMinJLabel = new javax.swing.JLabel();
		type2InputGrammarVariablesMinJTextField = new javax.swing.JTextField();
		type2InputGrammarRulesMinJTextField = new javax.swing.JTextField();
		type2InputGrammarVariablesMaxJLabel = new javax.swing.JLabel();
		type2InputGrammarRulesMaxJLabel = new javax.swing.JLabel();
		type2InputGrammarVariablesMaxJTextField = new javax.swing.JTextField();
		type2InputGrammarRulesMaxJTextField = new javax.swing.JTextField();
		type2InputGrammarTerminalsJLabel = new javax.swing.JLabel();
		type2InputGrammarTerminalsMinJLabel = new javax.swing.JLabel();
		type2InputGrammarTerminalsMinJTextField = new javax.swing.JTextField();
		type2InputGrammarTerminalsMaxJLabel = new javax.swing.JLabel();
		type2InputGrammarTerminalsMaxJTextField = new javax.swing.JTextField();
		type2InputGrammarEpsilonJCheckBox = new javax.swing.JCheckBox();
		type2InputGrammarTerminalsJComboBox = new javax.swing.JComboBox();
		type2InputGrammarVariablesJComboBox = new javax.swing.JComboBox();
		type2OutputAutomatonJPanel = new javax.swing.JPanel();
		type2OutputAutomatonAlphabetJLabel = new javax.swing.JLabel();
		type2OutputAutomatonAlphabetMinJLabel = new javax.swing.JLabel();
		type2OutputAutomatonAlphabetMaxJLabel = new javax.swing.JLabel();
		type2OutputAutomatonAlphabetMinJTextField = new javax.swing.JTextField();
		type2OutputAutomatonAlphabetMaxJTextField = new javax.swing.JTextField();
		type2OutputAutomatonStatesJLabel = new javax.swing.JLabel();
		type2OutputAutomatonTransitionsJLabel = new javax.swing.JLabel();
		type2OutputAutomatonStatesMinJLabel = new javax.swing.JLabel();
		type2OutputAutomatonTransitionsMinJLabel = new javax.swing.JLabel();
		type2OutputAutomatonStatesMaxJLabel = new javax.swing.JLabel();
		type2OutputAutomatonTransitionsMaxJLabel = new javax.swing.JLabel();
		type2OutputAutomatonStatesMinJTextField = new javax.swing.JTextField();
		type2OutputAutomatonTransitionsMinJTextField = new javax.swing.JTextField();
		type2OutputAutomatonStatesMaxJTextField = new javax.swing.JTextField();
		type2OutputAutomatonTransitionsMaxJTextField = new javax.swing.JTextField();
		type2OutputAutomatonUnreachableStates1JLabel = new javax.swing.JLabel();
		type2OutputAutomatonUnreachableStatesMinJLabel = new javax.swing.JLabel();
		type2OutputAutomatonUnreachableStatesMaxJLabel = new javax.swing.JLabel();
		type2OutputAutomatonUnreachableStatesMinJTextField = new javax.swing.JTextField();
		type2OutputAutomatonUnreachableStatesMaxJTextField = new javax.swing.JTextField();
		type2OutputAutomatonUnreachableStates2JLabel = new javax.swing.JLabel();
		type2InputAutomatonJPanel = new javax.swing.JPanel();
		type2InputAutomatonAlphabetJLabel = new javax.swing.JLabel();
		type2InputAutomatonStatesJLabel = new javax.swing.JLabel();
		type2InputAutomatonTransitionsJLabel = new javax.swing.JLabel();
		type2InputAutomatonFinalStatesJLabel = new javax.swing.JLabel();
		type2InputAutomatonAlphabetMinJLabel = new javax.swing.JLabel();
		type2InputAutomatonStatesMinJLabel = new javax.swing.JLabel();
		type2InputAutomatonFinalStatesMinJLabel = new javax.swing.JLabel();
		type2InputAutomatonTransitionsMinJLabel = new javax.swing.JLabel();
		type2InputAutomatonAlphabetMinJTextField = new javax.swing.JTextField();
		type2InputAutomatonStatesMinJTextField = new javax.swing.JTextField();
		type2InputAutomatonFinalStatesMinJTextField = new javax.swing.JTextField();
		type2InputAutomatonTransitionsMinJTextField = new javax.swing.JTextField();
		type2InputAutomatonAlphabetMaxJLabel = new javax.swing.JLabel();
		type2InputAutomatonStatesMaxJLabel = new javax.swing.JLabel();
		type2InputAutomatonFinalStatesMaxJLabel = new javax.swing.JLabel();
		type2InputAutomatonTransitionsMaxJLabel = new javax.swing.JLabel();
		type2InputAutomatonAlphabetMaxJTextField = new javax.swing.JTextField();
		type2InputAutomatonStatesMaxJTextField = new javax.swing.JTextField();
		type2InputAutomatonFinalStatesMaxJTextField = new javax.swing.JTextField();
		type2InputAutomatonTransitionsMaxJTextField = new javax.swing.JTextField();
		type2InputAutomatonAlphabetJComboBox = new javax.swing.JComboBox();
		type2InputAutomatonStatesJComboBox = new javax.swing.JComboBox();
		type2InputAutomatonUnreachableStates1JLabel = new javax.swing.JLabel();
		type2InputAutomatonUnreachableStates2JLabel = new javax.swing.JLabel();
		type2InputAutomatonUnreachableStatesMinJLabel = new javax.swing.JLabel();
		type2InputAutomatonUnreachableStatesMinJTextField = new javax.swing.JTextField();
		type2InputAutomatonUnreachableStatesMaxJLabel = new javax.swing.JLabel();
		type2InputAutomatonUnreachableStatesMaxJTextField = new javax.swing.JTextField();
		type2OutputGrammarJPanel = new javax.swing.JPanel();
		type2OutputGrammarVariablesJLabel = new javax.swing.JLabel();
		type2OutputGrammarTerminalsJLabel = new javax.swing.JLabel();
		type2OutputGrammarRulesJLabel = new javax.swing.JLabel();
		type2OutputGrammarVariablesMinJLabel = new javax.swing.JLabel();
		type2OutputGrammarTerminalsMinJLabel = new javax.swing.JLabel();
		type2OutputGrammarRulesMinJLabel = new javax.swing.JLabel();
		type2OutputGrammarVariablesMaxJLabel = new javax.swing.JLabel();
		type2OutputGrammarTerminalsMaxJLabel = new javax.swing.JLabel();
		type2OutputGrammarRulesMaxJLabel = new javax.swing.JLabel();
		type2OutputGrammarVariablesMinJTextField = new javax.swing.JTextField();
		type2OutputGrammarTerminalsMinJTextField = new javax.swing.JTextField();
		type2OutputGrammarRulesMinJTextField = new javax.swing.JTextField();
		type2OutputGrammarVariablesMaxJTextField = new javax.swing.JTextField();
		type2OutputGrammarTerminalsMaxJTextField = new javax.swing.JTextField();
		type2OutputGrammarRulesMaxJTextField = new javax.swing.JTextField();
		type2OutputGRammarEpsilonJCheckBox = new javax.swing.JCheckBox();
		type3JPanel = new javax.swing.JPanel();
		type3OperationJLabel = new javax.swing.JLabel();
		type3OperationJComboBox = new javax.swing.JComboBox();
		type3jLayeredPane = new javax.swing.JLayeredPane();
		type3InputAutomatonJPanel = new javax.swing.JPanel();
		type3InputAutomatonStatesJLabel = new javax.swing.JLabel();
		type3InputAutomatonStatesMinJLabel = new javax.swing.JLabel();
		type3InputAutomatonStatesMaxJLabel = new javax.swing.JLabel();
		type3InputAutomatonFinalStatesJLabel = new javax.swing.JLabel();
		type3InputAutomatonFinalStatesMinJLabel = new javax.swing.JLabel();
		type3InputAutomatonFinalStatesMaxJLabel = new javax.swing.JLabel();
		type3InputAutomatonTransitionsJLabel = new javax.swing.JLabel();
		type3InputAutomatonTransitionsMinJLabel = new javax.swing.JLabel();
		type3InputAutomatonTransitionsMaxJLabel = new javax.swing.JLabel();
		type3InputAutomatonAlphabetJLabel = new javax.swing.JLabel();
		type3InputAutomatonAlphabetMinJLabel = new javax.swing.JLabel();
		type3InputAutomatonAlphabetMaxJLabel = new javax.swing.JLabel();
		type3InputAutomatonStatesMinJTextField = new javax.swing.JTextField();
		type3InputAutomatonStatesMaxJTextField = new javax.swing.JTextField();
		type3InputAutomatonFinalStatesMinJTextField = new javax.swing.JTextField();
		type3InputAutomatonFinalStatesMaxJTextField = new javax.swing.JTextField();
		type3InputAutomatonTransitionsMinJTextField = new javax.swing.JTextField();
		type3InputAutomatonTransitionsMaxJTextField = new javax.swing.JTextField();
		type3InputAutomatonAlphabetMinJTextField = new javax.swing.JTextField();
		type3InputAutomatonAlphabetMaxJTextField = new javax.swing.JTextField();
		type3InputAutomatonAlphabetJComboBox = new javax.swing.JComboBox();
		type3InputAutomatonStatesJComboBox = new javax.swing.JComboBox();
		type3InputREJPanel = new javax.swing.JPanel();
		type3InputREAlphabetJLabel = new javax.swing.JLabel();
		type3InputREAlphabetMinJLabel = new javax.swing.JLabel();
		type3InputREAlphabetMaxJLabel = new javax.swing.JLabel();
		type3InputREAlphabetMinJTextField = new javax.swing.JTextField();
		type3InputREAlphabetMaxJTextField = new javax.swing.JTextField();
		type3InputReAlphabetJComboBox = new javax.swing.JComboBox();
		type3InputRELengthJLabel = new javax.swing.JLabel();
		type3InputRELengthMinJLabel = new javax.swing.JLabel();
		type3InputRELengthMaxJLabel = new javax.swing.JLabel();
		type3InputRELengthMinJTextField = new javax.swing.JTextField();
		type3InputRELengthMaxJTextField = new javax.swing.JTextField();
		type3OutputAutomatonJPanel = new javax.swing.JPanel();
		type3OutputAutomatonStatesJLabel = new javax.swing.JLabel();
		type3OutputAutomatonStatesMinJLabel = new javax.swing.JLabel();
		type3OutputAutomatonStatesMaxJLabel = new javax.swing.JLabel();
		type3OutputAutomatonTransitionsJLabel = new javax.swing.JLabel();
		type3OutputAutomatonTransitionsMinJLabel = new javax.swing.JLabel();
		type3OutputAutomatonTransitionsMaxJLabel = new javax.swing.JLabel();
		type3OutputAutomatonStatesMinJTextField = new javax.swing.JTextField();
		type3OutputAutomatonTransitionsMinJTextField = new javax.swing.JTextField();
		type3OutputAutomatonStatesMaxJTextField = new javax.swing.JTextField();
		type3OutputAutomatonTransitionsMaxJTextField = new javax.swing.JTextField();
		type3OutputAutomatonStatesJComboBox = new javax.swing.JComboBox();
		type3OutputREJPanel = new javax.swing.JPanel();
		type3OutputREAlphabetJLabel = new javax.swing.JLabel();
		type3OutputREAlphabetMinJLabel = new javax.swing.JLabel();
		type3OutputREAlphabetMinJTextField = new javax.swing.JTextField();
		type3OutputREAlphabetMaxJLabel = new javax.swing.JLabel();
		type3OutputREAlphabetMaxJTextField = new javax.swing.JTextField();
		type3OutputRELengthJLabel = new javax.swing.JLabel();
		type3OutputRELengthMinJLabel = new javax.swing.JLabel();
		type3OutputRELengthMaxJLabel = new javax.swing.JLabel();
		type3OutputRELengthMinJTextField = new javax.swing.JTextField();
		type3OutputRELengthMaxJTextField = new javax.swing.JTextField();
		generatingJPanel = new javax.swing.JPanel();
		exercisesJLabel = new javax.swing.JLabel();
		exercisesJTextField = new javax.swing.JTextField();
		generateJButton = new javax.swing.JButton();
		stopJButton = new javax.swing.JButton();
		progressJLabel = new javax.swing.JLabel();
		completedExercisesJLabel = new javax.swing.JLabel();
		jProgressBar = new javax.swing.JProgressBar();
		outputJTabbedPane = new javax.swing.JTabbedPane();
		plainTextJScrollPane = new javax.swing.JScrollPane();
		plainTextJTextArea = new javax.swing.JTextArea();
		latexJScrollPane = new javax.swing.JScrollPane();
		latexJTextArea = new javax.swing.JTextArea();
		isJScrollPane = new javax.swing.JScrollPane();
		isJTextArea = new javax.swing.JTextArea();
		plainTextENJScrollPane = new javax.swing.JScrollPane();
		plainTextENJTextArea = new javax.swing.JTextArea();
		latexENJScrollPane = new javax.swing.JScrollPane();
		latexENJTextArea = new javax.swing.JTextArea();
		isENJScrollPane = new javax.swing.JScrollPane();
		isENJTextArea = new javax.swing.JTextArea();
		copyAllJButton = new javax.swing.JButton();
		saveJButton = new javax.swing.JButton();
		saveAllJButton = new javax.swing.JButton();
		copyJButton = new javax.swing.JButton();

		setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
		setTitle("EXERCISE GENERATOR FOR REGULAR LANGUAGES");
		setMinimumSize(new java.awt.Dimension(957, 641));
		setName("frame"); // NOI18N
		addComponentListener(new java.awt.event.ComponentAdapter()
		{
			public void componentResized(java.awt.event.ComponentEvent evt)
			{
				formComponentResized(evt);
			}
		});
		getContentPane().setLayout(null);

		typeJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		typeJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "synchronous parallel composition",
			"transformation between various kinds of FA", "equivalence of finite automata and regular grammars ",
			"equivalence of finite automata and regular expressions" }));
		typeJComboBox.setName("typeJComboBox"); // NOI18N
		typeJComboBox.addActionListener(new java.awt.event.ActionListener()
		{
			public void actionPerformed(java.awt.event.ActionEvent evt)
			{
				typeJComboBoxActionPerformed(evt);
			}
		});
		getContentPane().add(typeJComboBox);
		typeJComboBox.setBounds(30, 10, 520, 21);

		typeJLayeredPane.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));

		type0JPanel.setLayout(null);

		type0Automaton1JPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Automaton A",
			javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
			new java.awt.Font("Lucida Sans", 0, 12)));
		type0Automaton1JPanel.setLayout(null);

		type0Automaton1StatesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton1StatesJLabel.setText("States");
		type0Automaton1JPanel.add(type0Automaton1StatesJLabel);
		type0Automaton1StatesJLabel.setBounds(10, 60, 80, 15);

		type0Automaton1FinalStatesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton1FinalStatesJLabel.setText("Final states");
		type0Automaton1JPanel.add(type0Automaton1FinalStatesJLabel);
		type0Automaton1FinalStatesJLabel.setBounds(10, 90, 80, 15);

		type0Automaton1TransitionsJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton1TransitionsJLabel.setText("Transitions");
		type0Automaton1JPanel.add(type0Automaton1TransitionsJLabel);
		type0Automaton1TransitionsJLabel.setBounds(10, 120, 80, 20);

		type0Automaton1AlphabetJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton1AlphabetJLabel.setText("Alphabet");
		type0Automaton1JPanel.add(type0Automaton1AlphabetJLabel);
		type0Automaton1AlphabetJLabel.setBounds(10, 30, 70, 15);

		type0Automaton1AlphabetMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton1AlphabetMinJLabel.setText("min");
		type0Automaton1JPanel.add(type0Automaton1AlphabetMinJLabel);
		type0Automaton1AlphabetMinJLabel.setBounds(100, 30, 30, 15);

		type0Automaton1StatesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton1StatesMinJLabel.setText("min");
		type0Automaton1JPanel.add(type0Automaton1StatesMinJLabel);
		type0Automaton1StatesMinJLabel.setBounds(100, 60, 30, 15);

		type0Automaton1FinalStatesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton1FinalStatesMinJLabel.setText("min");
		type0Automaton1JPanel.add(type0Automaton1FinalStatesMinJLabel);
		type0Automaton1FinalStatesMinJLabel.setBounds(100, 90, 30, 15);

		type0Automaton1TransitionsMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton1TransitionsMinJLabel.setText("min");
		type0Automaton1JPanel.add(type0Automaton1TransitionsMinJLabel);
		type0Automaton1TransitionsMinJLabel.setBounds(100, 120, 30, 15);

		type0Automaton1AlphabetMinJTextField.setText("2");
		type0Automaton1JPanel.add(type0Automaton1AlphabetMinJTextField);
		type0Automaton1AlphabetMinJTextField.setBounds(130, 30, 60, 20);

		type0Automaton1StatesMinJTextField.setText("2");
		type0Automaton1JPanel.add(type0Automaton1StatesMinJTextField);
		type0Automaton1StatesMinJTextField.setBounds(130, 60, 60, 20);

		type0Automaton1FinalStatesMinJTextField.setText("1");
		type0Automaton1JPanel.add(type0Automaton1FinalStatesMinJTextField);
		type0Automaton1FinalStatesMinJTextField.setBounds(130, 90, 60, 20);

		type0Automaton1TransitionsMinJTextField.setText("2");
		type0Automaton1JPanel.add(type0Automaton1TransitionsMinJTextField);
		type0Automaton1TransitionsMinJTextField.setBounds(130, 120, 60, 20);

		type0Automaton1AlphabetMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton1AlphabetMaxJLabel.setText("max");
		type0Automaton1JPanel.add(type0Automaton1AlphabetMaxJLabel);
		type0Automaton1AlphabetMaxJLabel.setBounds(210, 30, 30, 15);

		type0Automaton1StatesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton1StatesMaxJLabel.setText("max");
		type0Automaton1JPanel.add(type0Automaton1StatesMaxJLabel);
		type0Automaton1StatesMaxJLabel.setBounds(210, 60, 30, 15);

		type0Automaton1FinalStatesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton1FinalStatesMaxJLabel.setText("max");
		type0Automaton1JPanel.add(type0Automaton1FinalStatesMaxJLabel);
		type0Automaton1FinalStatesMaxJLabel.setBounds(210, 90, 30, 15);

		type0Automaton1TransitionsMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton1TransitionsMaxJLabel.setText("max");
		type0Automaton1JPanel.add(type0Automaton1TransitionsMaxJLabel);
		type0Automaton1TransitionsMaxJLabel.setBounds(210, 120, 30, 15);

		type0Automaton1AlphabetMaxJTextField.setText("3");
		type0Automaton1JPanel.add(type0Automaton1AlphabetMaxJTextField);
		type0Automaton1AlphabetMaxJTextField.setBounds(240, 30, 60, 20);

		type0Automaton1StatesMaxJTextField.setText("5");
		type0Automaton1JPanel.add(type0Automaton1StatesMaxJTextField);
		type0Automaton1StatesMaxJTextField.setBounds(240, 60, 60, 20);

		type0Automaton1FinalStatesMaxJTextField.setText("3");
		type0Automaton1JPanel.add(type0Automaton1FinalStatesMaxJTextField);
		type0Automaton1FinalStatesMaxJTextField.setBounds(240, 90, 60, 20);

		type0Automaton1TransitionsMaxJTextField.setText("6");
		type0Automaton1JPanel.add(type0Automaton1TransitionsMaxJTextField);
		type0Automaton1TransitionsMaxJTextField.setBounds(240, 120, 60, 20);

		type0AlphabetJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0AlphabetJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "a, b, c...", "A, B, C...",
			"1, 2, 3...", "x, y, z...", "X, Y, Z...", "t0, t1, t2...", "p0, p1, p2...", "I, II, III, IV...",
			"i, ii, iii, iv...", "1, 10, 11, 100..." }));
		type0Automaton1JPanel.add(type0AlphabetJComboBox);
		type0AlphabetJComboBox.setBounds(340, 30, 130, 21);

		type0Automaton1StatesJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton1StatesJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "a, b, c...",
			"A, B, C...", "1, 2, 3...", "x, y, z...", "X, Y, Z...", "q0, q1, q2...", "s0, s1, s2..." }));
		type0Automaton1StatesJComboBox.setSelectedIndex(5);
		type0Automaton1JPanel.add(type0Automaton1StatesJComboBox);
		type0Automaton1StatesJComboBox.setBounds(340, 60, 130, 21);

		type0Automaton1TotalTransitionFunctionJCheckBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton1TotalTransitionFunctionJCheckBox.setText("total transition function");
		type0Automaton1JPanel.add(type0Automaton1TotalTransitionFunctionJCheckBox);
		type0Automaton1TotalTransitionFunctionJCheckBox.setBounds(340, 90, 160, 23);

		type0JPanel.add(type0Automaton1JPanel);
		type0Automaton1JPanel.setBounds(0, 70, 520, 160);

		type0Automaton2JPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Automaton B",
			javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
			new java.awt.Font("Lucida Sans", 0, 12)));
		type0Automaton2JPanel.setLayout(null);

		type0Automaton2StatesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton2StatesMinJLabel.setText("min");
		type0Automaton2JPanel.add(type0Automaton2StatesMinJLabel);
		type0Automaton2StatesMinJLabel.setBounds(100, 30, 30, 15);

		type0Automaton2FinalStatesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton2FinalStatesMinJLabel.setText("min");
		type0Automaton2JPanel.add(type0Automaton2FinalStatesMinJLabel);
		type0Automaton2FinalStatesMinJLabel.setBounds(100, 60, 30, 15);

		type0Automaton2TransitionsMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton2TransitionsMinJLabel.setText("min");
		type0Automaton2JPanel.add(type0Automaton2TransitionsMinJLabel);
		type0Automaton2TransitionsMinJLabel.setBounds(100, 90, 30, 15);

		type0Automaton2StatesMinJTextField.setText("1");
		type0Automaton2JPanel.add(type0Automaton2StatesMinJTextField);
		type0Automaton2StatesMinJTextField.setBounds(130, 30, 60, 20);

		type0Automaton2FinalStatesMinJTextField.setText("1");
		type0Automaton2JPanel.add(type0Automaton2FinalStatesMinJTextField);
		type0Automaton2FinalStatesMinJTextField.setBounds(130, 60, 60, 20);

		type0Automaton2TransitionsMinJTextField.setText("2");
		type0Automaton2JPanel.add(type0Automaton2TransitionsMinJTextField);
		type0Automaton2TransitionsMinJTextField.setBounds(130, 90, 60, 20);

		type0Automaton2StatesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton2StatesMaxJLabel.setText("max");
		type0Automaton2JPanel.add(type0Automaton2StatesMaxJLabel);
		type0Automaton2StatesMaxJLabel.setBounds(210, 30, 30, 15);

		type0Automaton2FinalStatesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton2FinalStatesMaxJLabel.setText("max");
		type0Automaton2JPanel.add(type0Automaton2FinalStatesMaxJLabel);
		type0Automaton2FinalStatesMaxJLabel.setBounds(210, 60, 30, 15);

		type0Automaton2TransitionsMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton2TransitionsMaxJLabel.setText("max");
		type0Automaton2JPanel.add(type0Automaton2TransitionsMaxJLabel);
		type0Automaton2TransitionsMaxJLabel.setBounds(210, 90, 30, 15);

		type0Automaton2StatesMaxJTextField.setText("3");
		type0Automaton2JPanel.add(type0Automaton2StatesMaxJTextField);
		type0Automaton2StatesMaxJTextField.setBounds(240, 30, 60, 20);

		type0Automaton2FinalStatesMaxJTextField.setText("2");
		type0Automaton2JPanel.add(type0Automaton2FinalStatesMaxJTextField);
		type0Automaton2FinalStatesMaxJTextField.setBounds(240, 60, 60, 20);

		type0Automaton2TransitionsMaxJTextField.setText("6");
		type0Automaton2JPanel.add(type0Automaton2TransitionsMaxJTextField);
		type0Automaton2TransitionsMaxJTextField.setBounds(240, 90, 60, 20);

		type0Automaton2StatesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton2StatesJLabel.setText("States");
		type0Automaton2JPanel.add(type0Automaton2StatesJLabel);
		type0Automaton2StatesJLabel.setBounds(10, 30, 60, 15);

		type0Automaton2FinalStatesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton2FinalStatesJLabel.setText("Final states");
		type0Automaton2JPanel.add(type0Automaton2FinalStatesJLabel);
		type0Automaton2FinalStatesJLabel.setBounds(10, 60, 80, 15);

		type0Automaton2TransitionsJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton2TransitionsJLabel.setText("Transitions");
		type0Automaton2JPanel.add(type0Automaton2TransitionsJLabel);
		type0Automaton2TransitionsJLabel.setBounds(10, 90, 70, 15);

		type0Automaton2StatesJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton2StatesJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "a, b, c...",
			"A, B, C...", "1, 2, 3...", "x, y, z...", "X, Y, Z...", "q0, q1, q2...", "s0, s1, s2..." }));
		type0Automaton2JPanel.add(type0Automaton2StatesJComboBox);
		type0Automaton2StatesJComboBox.setBounds(340, 30, 130, 21);

		type0Automaton2TotalTransitionFunctionJCheckBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton2TotalTransitionFunctionJCheckBox.setText("total transition function");
		type0Automaton2JPanel.add(type0Automaton2TotalTransitionFunctionJCheckBox);
		type0Automaton2TotalTransitionFunctionJCheckBox.setBounds(340, 60, 160, 23);

		type0JPanel.add(type0Automaton2JPanel);
		type0Automaton2JPanel.setBounds(0, 230, 520, 120);

		type0OperationJPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Operation",
			javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
			new java.awt.Font("Lucida Sans", 0, 12)));
		type0OperationJPanel.setLayout(null);

		type0Automaton1buttonGroup.add(type0Automaton1JRadioButton);
		type0Automaton1JRadioButton.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton1JRadioButton.setSelected(true);
		type0Automaton1JRadioButton.setText("L(A)");
		type0OperationJPanel.add(type0Automaton1JRadioButton);
		type0Automaton1JRadioButton.setBounds(20, 20, 80, 23);

		type0Automaton1buttonGroup.add(type0Automaton1CoJRadioButton);
		type0Automaton1CoJRadioButton.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton1CoJRadioButton.setText("co-L(A)");
		type0OperationJPanel.add(type0Automaton1CoJRadioButton);
		type0Automaton1CoJRadioButton.setBounds(20, 40, 80, 23);

		type0Automaton2buttonGroup.add(type0Automaton2JRadioButton);
		type0Automaton2JRadioButton.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton2JRadioButton.setSelected(true);
		type0Automaton2JRadioButton.setText("L(B)");
		type0OperationJPanel.add(type0Automaton2JRadioButton);
		type0Automaton2JRadioButton.setBounds(330, 20, 100, 23);

		type0Automaton2buttonGroup.add(type0Automaton2CoJRadioButton);
		type0Automaton2CoJRadioButton.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton2CoJRadioButton.setText("co-L(B)");
		type0OperationJPanel.add(type0Automaton2CoJRadioButton);
		type0Automaton2CoJRadioButton.setBounds(330, 40, 90, 23);

		type0OperationJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0OperationJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "union", "intersection",
			"difference" }));
		type0OperationJComboBox.addActionListener(new java.awt.event.ActionListener()
		{
			public void actionPerformed(java.awt.event.ActionEvent evt)
			{
				type0OperationJComboBoxActionPerformed(evt);
			}
		});
		type0OperationJPanel.add(type0OperationJComboBox);
		type0OperationJComboBox.setBounds(120, 30, 190, 21);

		type0JPanel.add(type0OperationJPanel);
		type0OperationJPanel.setBounds(0, 0, 520, 70);

		type0OutputAutomatonJPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Output automaton",
			javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
			new java.awt.Font("Lucida Sans", 0, 12)));
		type0OutputAutomatonJPanel.setLayout(null);

		type0OutputAutomatonStatesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0OutputAutomatonStatesJLabel.setText("States");
		type0OutputAutomatonJPanel.add(type0OutputAutomatonStatesJLabel);
		type0OutputAutomatonStatesJLabel.setBounds(10, 30, 50, 15);

		type0OutputAutomatonStatesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0OutputAutomatonStatesMinJLabel.setText("min");
		type0OutputAutomatonJPanel.add(type0OutputAutomatonStatesMinJLabel);
		type0OutputAutomatonStatesMinJLabel.setBounds(100, 30, 30, 15);

		type0OutputAutomatonStatesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0OutputAutomatonStatesMaxJLabel.setText("max");
		type0OutputAutomatonJPanel.add(type0OutputAutomatonStatesMaxJLabel);
		type0OutputAutomatonStatesMaxJLabel.setBounds(210, 30, 30, 15);

		type0OutputAutomatonStatesMinJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type0OutputAutomatonJPanel.add(type0OutputAutomatonStatesMinJTextField);
		type0OutputAutomatonStatesMinJTextField.setBounds(130, 30, 60, 20);

		type0OutputAutomatonStatesMaxJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type0OutputAutomatonJPanel.add(type0OutputAutomatonStatesMaxJTextField);
		type0OutputAutomatonStatesMaxJTextField.setBounds(240, 30, 60, 20);

		type0OutputAutomatonMinOneFinalStateJCheckBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0OutputAutomatonMinOneFinalStateJCheckBox.setText("min one final state");
		type0OutputAutomatonJPanel.add(type0OutputAutomatonMinOneFinalStateJCheckBox);
		type0OutputAutomatonMinOneFinalStateJCheckBox.setBounds(340, 30, 140, 23);

		type0OutputAutomatonTransitionsJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0OutputAutomatonTransitionsJLabel.setText("Transitions");
		type0OutputAutomatonJPanel.add(type0OutputAutomatonTransitionsJLabel);
		type0OutputAutomatonTransitionsJLabel.setBounds(10, 60, 70, 15);

		type0OutputAutomatonTransitionsMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0OutputAutomatonTransitionsMinJLabel.setText("min");
		type0OutputAutomatonJPanel.add(type0OutputAutomatonTransitionsMinJLabel);
		type0OutputAutomatonTransitionsMinJLabel.setBounds(100, 60, 30, 15);

		type0OutputAutomatonTransitionsMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0OutputAutomatonTransitionsMaxJLabel.setText("max");
		type0OutputAutomatonJPanel.add(type0OutputAutomatonTransitionsMaxJLabel);
		type0OutputAutomatonTransitionsMaxJLabel.setBounds(210, 60, 30, 15);

		type0OutputAutomatonTransitionsMinJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type0OutputAutomatonJPanel.add(type0OutputAutomatonTransitionsMinJTextField);
		type0OutputAutomatonTransitionsMinJTextField.setBounds(130, 60, 60, 20);

		type0OutputAutomatonTransitionsMaxJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type0OutputAutomatonJPanel.add(type0OutputAutomatonTransitionsMaxJTextField);
		type0OutputAutomatonTransitionsMaxJTextField.setBounds(240, 60, 60, 20);

		type0JPanel.add(type0OutputAutomatonJPanel);
		type0OutputAutomatonJPanel.setBounds(0, 350, 520, 90);

		type0JPanel.setBounds(0, 0, 530, 450);
		typeJLayeredPane.add(type0JPanel, javax.swing.JLayeredPane.DEFAULT_LAYER);

		type1JPanel.setLayout(null);

		type1InputAutomantonJPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Input automaton",
			javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
			new java.awt.Font("Lucida Sans", 0, 12)));
		type1InputAutomantonJPanel.setLayout(null);

		type1InputAutomatonStatesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonStatesJLabel.setText("States");
		type1InputAutomantonJPanel.add(type1InputAutomatonStatesJLabel);
		type1InputAutomatonStatesJLabel.setBounds(10, 60, 80, 15);

		type1InputAutomatonFinalStatesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonFinalStatesJLabel.setText("Final states");
		type1InputAutomantonJPanel.add(type1InputAutomatonFinalStatesJLabel);
		type1InputAutomatonFinalStatesJLabel.setBounds(10, 90, 80, 15);

		type1InputAutomatonTransitionsJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonTransitionsJLabel.setText("Transitions");
		type1InputAutomantonJPanel.add(type1InputAutomatonTransitionsJLabel);
		type1InputAutomatonTransitionsJLabel.setBounds(10, 120, 80, 15);

		type1InputAutomatonAlphabetJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonAlphabetJLabel.setText("Alphabet");
		type1InputAutomantonJPanel.add(type1InputAutomatonAlphabetJLabel);
		type1InputAutomatonAlphabetJLabel.setBounds(10, 30, 80, 15);

		type1InputAutomatonStatesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonStatesMinJLabel.setText("min");
		type1InputAutomantonJPanel.add(type1InputAutomatonStatesMinJLabel);
		type1InputAutomatonStatesMinJLabel.setBounds(100, 60, 30, 15);

		type1InputAutomatonFinalStatesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonFinalStatesMinJLabel.setText("min");
		type1InputAutomantonJPanel.add(type1InputAutomatonFinalStatesMinJLabel);
		type1InputAutomatonFinalStatesMinJLabel.setBounds(100, 90, 30, 15);

		type1InputAutomatonTransitionsMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonTransitionsMinJLabel.setText("min");
		type1InputAutomantonJPanel.add(type1InputAutomatonTransitionsMinJLabel);
		type1InputAutomatonTransitionsMinJLabel.setBounds(100, 120, 30, 15);

		type1InputAutomatonAlphabetMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonAlphabetMinJLabel.setText("min");
		type1InputAutomantonJPanel.add(type1InputAutomatonAlphabetMinJLabel);
		type1InputAutomatonAlphabetMinJLabel.setBounds(100, 30, 30, 15);

		type1InputAutomatonStatesMinJTextField.setText("1");
		type1InputAutomantonJPanel.add(type1InputAutomatonStatesMinJTextField);
		type1InputAutomatonStatesMinJTextField.setBounds(130, 60, 60, 20);

		type1InputAutomatonFinalStatesMinJTextField.setText("1");
		type1InputAutomantonJPanel.add(type1InputAutomatonFinalStatesMinJTextField);
		type1InputAutomatonFinalStatesMinJTextField.setBounds(130, 90, 60, 20);

		type1InputAutomatonTransitionsMinJTextField.setText("1");
		type1InputAutomantonJPanel.add(type1InputAutomatonTransitionsMinJTextField);
		type1InputAutomatonTransitionsMinJTextField.setBounds(130, 120, 60, 20);

		type1InputAutomatonAlphabetMinJTextField.setText("1");
		type1InputAutomantonJPanel.add(type1InputAutomatonAlphabetMinJTextField);
		type1InputAutomatonAlphabetMinJTextField.setBounds(130, 30, 60, 20);

		type1InputAutomatonStatesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonStatesMaxJLabel.setText("max");
		type1InputAutomantonJPanel.add(type1InputAutomatonStatesMaxJLabel);
		type1InputAutomatonStatesMaxJLabel.setBounds(210, 60, 30, 15);

		type1InputAutomatonFinalStatesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonFinalStatesMaxJLabel.setText("max");
		type1InputAutomantonJPanel.add(type1InputAutomatonFinalStatesMaxJLabel);
		type1InputAutomatonFinalStatesMaxJLabel.setBounds(210, 90, 30, 15);

		type1InputAutomatonTransitionsMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonTransitionsMaxJLabel.setText("max");
		type1InputAutomantonJPanel.add(type1InputAutomatonTransitionsMaxJLabel);
		type1InputAutomatonTransitionsMaxJLabel.setBounds(210, 120, 30, 15);

		type1InputAutomatonAlphabetMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonAlphabetMaxJLabel.setText("max");
		type1InputAutomantonJPanel.add(type1InputAutomatonAlphabetMaxJLabel);
		type1InputAutomatonAlphabetMaxJLabel.setBounds(210, 30, 30, 15);

		type1InputAutomatonStatesMaxJTextField.setText("5");
		type1InputAutomantonJPanel.add(type1InputAutomatonStatesMaxJTextField);
		type1InputAutomatonStatesMaxJTextField.setBounds(240, 60, 60, 20);

		type1InputAutomatonFinalStatesMaxJTextField.setText("1");
		type1InputAutomantonJPanel.add(type1InputAutomatonFinalStatesMaxJTextField);
		type1InputAutomatonFinalStatesMaxJTextField.setBounds(240, 90, 60, 20);

		type1InputAutomatonTransitionsMaxJTextField.setText("5");
		type1InputAutomantonJPanel.add(type1InputAutomatonTransitionsMaxJTextField);
		type1InputAutomatonTransitionsMaxJTextField.setBounds(240, 120, 60, 20);

		type1InputAutomatonAlphabetMaxJTextField.setText("2");
		type1InputAutomantonJPanel.add(type1InputAutomatonAlphabetMaxJTextField);
		type1InputAutomatonAlphabetMaxJTextField.setBounds(240, 30, 60, 20);

		type1InputAutomatonAlphabetJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonAlphabetJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "a, b, c...",
			"A, B, C...", "1, 2, 3...", "x, y, z...", "X, Y, Z..." }));
		type1InputAutomantonJPanel.add(type1InputAutomatonAlphabetJComboBox);
		type1InputAutomatonAlphabetJComboBox.setBounds(340, 30, 130, 21);

		type1InputAutomatonStatesJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonStatesJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "a, b, c...",
			"A, B, C...", "1, 2, 3...", "x, y, z...", "X, Y, Z...", "q0, q1, q2...", "s0 , s1 , s2..." }));
		type1InputAutomatonStatesJComboBox.setSelectedIndex(6);
		type1InputAutomantonJPanel.add(type1InputAutomatonStatesJComboBox);
		type1InputAutomatonStatesJComboBox.setBounds(340, 60, 130, 21);

		type1InputAutomatonFirstStateJCheckBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonFirstStateJCheckBox.setText("the first state not initial");
		type1InputAutomantonJPanel.add(type1InputAutomatonFirstStateJCheckBox);
		type1InputAutomatonFirstStateJCheckBox.setBounds(330, 90, 180, 23);

		type1InputAutomatonTotalTransitionFunctionJCheckBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonTotalTransitionFunctionJCheckBox.setText("total transition function");
		type1InputAutomantonJPanel.add(type1InputAutomatonTotalTransitionFunctionJCheckBox);
		type1InputAutomatonTotalTransitionFunctionJCheckBox.setBounds(330, 120, 160, 23);

		type1InputAutomatonUnreachableStates1JLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonUnreachableStates1JLabel.setText("Unreachable");
		type1InputAutomantonJPanel.add(type1InputAutomatonUnreachableStates1JLabel);
		type1InputAutomatonUnreachableStates1JLabel.setBounds(10, 150, 80, 20);

		type1InputAutomatonUnreachableStates2jLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonUnreachableStates2jLabel.setText("states");
		type1InputAutomantonJPanel.add(type1InputAutomatonUnreachableStates2jLabel);
		type1InputAutomatonUnreachableStates2jLabel.setBounds(10, 170, 50, 15);

		type1InputAutomatonUnreachableStatesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonUnreachableStatesMinJLabel.setText("min");
		type1InputAutomantonJPanel.add(type1InputAutomatonUnreachableStatesMinJLabel);
		type1InputAutomatonUnreachableStatesMinJLabel.setBounds(100, 150, 30, 15);

		type1InputAutomatonUnreachableStatesMinJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type1InputAutomantonJPanel.add(type1InputAutomatonUnreachableStatesMinJTextField);
		type1InputAutomatonUnreachableStatesMinJTextField.setBounds(130, 150, 60, 20);

		type1InputAutomatonUnreachableStatesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonUnreachableStatesMaxJLabel.setText("max");
		type1InputAutomantonJPanel.add(type1InputAutomatonUnreachableStatesMaxJLabel);
		type1InputAutomatonUnreachableStatesMaxJLabel.setBounds(210, 150, 30, 15);

		type1InputAutomatonUnreachableStatesMaxJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type1InputAutomantonJPanel.add(type1InputAutomatonUnreachableStatesMaxJTextField);
		type1InputAutomatonUnreachableStatesMaxJTextField.setBounds(240, 150, 60, 20);

		type1JPanel.add(type1InputAutomantonJPanel);
		type1InputAutomantonJPanel.setBounds(0, 70, 520, 200);

		type1OutputAutomatonJPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Output automaton",
			javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
			new java.awt.Font("Lucida Sans", 0, 12)));
		type1OutputAutomatonJPanel.setLayout(null);

		type1OutputAutomatonStatesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1OutputAutomatonStatesJLabel.setText("States");
		type1OutputAutomatonJPanel.add(type1OutputAutomatonStatesJLabel);
		type1OutputAutomatonStatesJLabel.setBounds(10, 30, 80, 15);

		type1OutputAutomatonStatesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1OutputAutomatonStatesMinJLabel.setText("min");
		type1OutputAutomatonJPanel.add(type1OutputAutomatonStatesMinJLabel);
		type1OutputAutomatonStatesMinJLabel.setBounds(100, 30, 30, 15);

		type1OutputAutomatonStatesMinJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type1OutputAutomatonJPanel.add(type1OutputAutomatonStatesMinJTextField);
		type1OutputAutomatonStatesMinJTextField.setBounds(130, 30, 60, 20);

		type1OutputAutomatonStatesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1OutputAutomatonStatesMaxJLabel.setText("max");
		type1OutputAutomatonJPanel.add(type1OutputAutomatonStatesMaxJLabel);
		type1OutputAutomatonStatesMaxJLabel.setBounds(210, 30, 30, 15);

		type1OutputAutomatonStatesMaxJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type1OutputAutomatonJPanel.add(type1OutputAutomatonStatesMaxJTextField);
		type1OutputAutomatonStatesMaxJTextField.setBounds(240, 30, 60, 20);

		type1OutputAutomatonTransitionsJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1OutputAutomatonTransitionsJLabel.setText("Transitions");
		type1OutputAutomatonJPanel.add(type1OutputAutomatonTransitionsJLabel);
		type1OutputAutomatonTransitionsJLabel.setBounds(10, 60, 80, 15);

		type1OutputAutomatonTransitionsMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1OutputAutomatonTransitionsMinJLabel.setText("min");
		type1OutputAutomatonJPanel.add(type1OutputAutomatonTransitionsMinJLabel);
		type1OutputAutomatonTransitionsMinJLabel.setBounds(100, 60, 30, 15);

		type1OutputAutomatonTransitionsMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1OutputAutomatonTransitionsMaxJLabel.setText("max");
		type1OutputAutomatonJPanel.add(type1OutputAutomatonTransitionsMaxJLabel);
		type1OutputAutomatonTransitionsMaxJLabel.setBounds(210, 60, 30, 15);

		type1OutputAutomatonTransitionsMinJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type1OutputAutomatonJPanel.add(type1OutputAutomatonTransitionsMinJTextField);
		type1OutputAutomatonTransitionsMinJTextField.setBounds(130, 60, 60, 20);

		type1OutputAutomatonTransitionsMaxJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type1OutputAutomatonJPanel.add(type1OutputAutomatonTransitionsMaxJTextField);
		type1OutputAutomatonTransitionsMaxJTextField.setBounds(240, 60, 60, 20);

		type1JPanel.add(type1OutputAutomatonJPanel);
		type1OutputAutomatonJPanel.setBounds(0, 270, 520, 100);

		type1MinimizationJPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Minimization",
			javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
			new java.awt.Font("Lucida Sans", 0, 12)));
		type1MinimizationJPanel.setLayout(null);

		type1MinimizationStepsJCheckBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1MinimizationStepsJCheckBox.setText("write out");
		type1MinimizationJPanel.add(type1MinimizationStepsJCheckBox);
		type1MinimizationStepsJCheckBox.setBounds(350, 30, 90, 23);

		type1MinimizationStepsJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1MinimizationStepsJLabel.setText("Steps");
		type1MinimizationJPanel.add(type1MinimizationStepsJLabel);
		type1MinimizationStepsJLabel.setBounds(10, 30, 50, 15);

		type1MinimizationStepsMinJTextField.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(
			153, 255, 102)));
		type1MinimizationJPanel.add(type1MinimizationStepsMinJTextField);
		type1MinimizationStepsMinJTextField.setBounds(130, 30, 60, 20);

		type1MinimizationStepsMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1MinimizationStepsMinJLabel.setText("min");
		type1MinimizationJPanel.add(type1MinimizationStepsMinJLabel);
		type1MinimizationStepsMinJLabel.setBounds(100, 30, 30, 15);

		type1MinimizationStepsMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1MinimizationStepsMaxJLabel.setText("max");
		type1MinimizationJPanel.add(type1MinimizationStepsMaxJLabel);
		type1MinimizationStepsMaxJLabel.setBounds(210, 30, 30, 15);

		type1MinimizationStepsMaxJTextField.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(
			153, 255, 102)));
		type1MinimizationJPanel.add(type1MinimizationStepsMaxJTextField);
		type1MinimizationStepsMaxJTextField.setBounds(240, 30, 60, 20);

		type1JPanel.add(type1MinimizationJPanel);
		type1MinimizationJPanel.setBounds(0, 370, 520, 70);

		type1OperationJPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Operations",
			javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
			new java.awt.Font("Lucida Sans", 0, 12)));
		type1OperationJPanel.setLayout(null);

		type1OperationFromJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1OperationFromJLabel.setText("from");
		type1OperationJPanel.add(type1OperationFromJLabel);
		type1OperationFromJLabel.setBounds(20, 30, 30, 20);

		type1OperationFromJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1OperationFromJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] {
			"NFA with ε-transitions", "NFA", "DFA", "minimal DFA" }));
		type1OperationFromJComboBox.addActionListener(new java.awt.event.ActionListener()
		{
			public void actionPerformed(java.awt.event.ActionEvent evt)
			{
				type1OperationFromJComboBoxActionPerformed(evt);
			}
		});
		type1OperationJPanel.add(type1OperationFromJComboBox);
		type1OperationFromJComboBox.setBounds(60, 30, 190, 21);

		type1OperationToJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1OperationToJLabel.setText("to");
		type1OperationJPanel.add(type1OperationToJLabel);
		type1OperationToJLabel.setBounds(280, 30, 20, 20);

		type1OperationToJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1OperationToJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "NFA", "DFA",
			"minimal DFA", "canonical DFA" }));
		type1OperationToJComboBox.setMinimumSize(new java.awt.Dimension(159, 20));
		type1OperationToJComboBox.setName("Operations: to");
		type1OperationToJComboBox.addActionListener(new java.awt.event.ActionListener()
		{
			public void actionPerformed(java.awt.event.ActionEvent evt)
			{
				type1OperationToJComboBoxActionPerformed(evt);
			}
		});
		type1OperationJPanel.add(type1OperationToJComboBox);
		type1OperationToJComboBox.setBounds(300, 30, 190, 21);

		type1JPanel.add(type1OperationJPanel);
		type1OperationJPanel.setBounds(0, 0, 520, 70);

		type1JPanel.setBounds(0, 0, 530, 450);
		typeJLayeredPane.add(type1JPanel, new Integer(1));

		type2JPanel.setLayout(null);

		type2OperationJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OperationJLabel.setText("Operation");
		type2JPanel.add(type2OperationJLabel);
		type2OperationJLabel.setBounds(10, 10, 70, 15);

		type2OperationJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OperationJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "NFA  -> regular grammar",
			"regular grammar -> NFA" }));
		type2OperationJComboBox.addActionListener(new java.awt.event.ActionListener()
		{
			public void actionPerformed(java.awt.event.ActionEvent evt)
			{
				type2OperationJComboBoxActionPerformed(evt);
			}
		});
		type2JPanel.add(type2OperationJComboBox);
		type2OperationJComboBox.setBounds(110, 10, 250, 21);

		type2InputGrammarJPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Input grammar",
			javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
			new java.awt.Font("Lucida Sans", 0, 12)));
		type2InputGrammarJPanel.setLayout(null);

		type2InputGrammarVariablesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputGrammarVariablesJLabel.setText("Non-terminals");
		type2InputGrammarJPanel.add(type2InputGrammarVariablesJLabel);
		type2InputGrammarVariablesJLabel.setBounds(10, 60, 90, 15);

		type2InputGrammarRulesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputGrammarRulesJLabel.setText("Rules");
		type2InputGrammarJPanel.add(type2InputGrammarRulesJLabel);
		type2InputGrammarRulesJLabel.setBounds(10, 90, 60, 15);

		type2InputGrammarVariablesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputGrammarVariablesMinJLabel.setText("min");
		type2InputGrammarJPanel.add(type2InputGrammarVariablesMinJLabel);
		type2InputGrammarVariablesMinJLabel.setBounds(100, 60, 30, 15);

		type2InputGrammarRulesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputGrammarRulesMinJLabel.setText("min");
		type2InputGrammarJPanel.add(type2InputGrammarRulesMinJLabel);
		type2InputGrammarRulesMinJLabel.setBounds(100, 90, 30, 15);

		type2InputGrammarVariablesMinJTextField.setText("1");
		type2InputGrammarJPanel.add(type2InputGrammarVariablesMinJTextField);
		type2InputGrammarVariablesMinJTextField.setBounds(130, 60, 60, 20);

		type2InputGrammarRulesMinJTextField.setText("3");
		type2InputGrammarJPanel.add(type2InputGrammarRulesMinJTextField);
		type2InputGrammarRulesMinJTextField.setBounds(130, 90, 60, 20);

		type2InputGrammarVariablesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputGrammarVariablesMaxJLabel.setText("max");
		type2InputGrammarJPanel.add(type2InputGrammarVariablesMaxJLabel);
		type2InputGrammarVariablesMaxJLabel.setBounds(210, 60, 30, 15);

		type2InputGrammarRulesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputGrammarRulesMaxJLabel.setText("max");
		type2InputGrammarJPanel.add(type2InputGrammarRulesMaxJLabel);
		type2InputGrammarRulesMaxJLabel.setBounds(210, 90, 30, 15);

		type2InputGrammarVariablesMaxJTextField.setText("4");
		type2InputGrammarJPanel.add(type2InputGrammarVariablesMaxJTextField);
		type2InputGrammarVariablesMaxJTextField.setBounds(240, 60, 60, 20);

		type2InputGrammarRulesMaxJTextField.setText("8");
		type2InputGrammarJPanel.add(type2InputGrammarRulesMaxJTextField);
		type2InputGrammarRulesMaxJTextField.setBounds(240, 90, 60, 20);

		type2InputGrammarTerminalsJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputGrammarTerminalsJLabel.setText("Terminals");
		type2InputGrammarJPanel.add(type2InputGrammarTerminalsJLabel);
		type2InputGrammarTerminalsJLabel.setBounds(10, 30, 70, 15);

		type2InputGrammarTerminalsMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputGrammarTerminalsMinJLabel.setText("min");
		type2InputGrammarJPanel.add(type2InputGrammarTerminalsMinJLabel);
		type2InputGrammarTerminalsMinJLabel.setBounds(100, 30, 30, 15);

		type2InputGrammarTerminalsMinJTextField.setText("1");
		type2InputGrammarJPanel.add(type2InputGrammarTerminalsMinJTextField);
		type2InputGrammarTerminalsMinJTextField.setBounds(130, 30, 60, 20);

		type2InputGrammarTerminalsMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputGrammarTerminalsMaxJLabel.setText("max");
		type2InputGrammarJPanel.add(type2InputGrammarTerminalsMaxJLabel);
		type2InputGrammarTerminalsMaxJLabel.setBounds(210, 30, 30, 15);

		type2InputGrammarTerminalsMaxJTextField.setText("3");
		type2InputGrammarJPanel.add(type2InputGrammarTerminalsMaxJTextField);
		type2InputGrammarTerminalsMaxJTextField.setBounds(240, 30, 60, 20);

		type2InputGrammarEpsilonJCheckBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputGrammarEpsilonJCheckBox.setText("epsilon rule");
		type2InputGrammarJPanel.add(type2InputGrammarEpsilonJCheckBox);
		type2InputGrammarEpsilonJCheckBox.setBounds(340, 90, 110, 23);

		type2InputGrammarTerminalsJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputGrammarTerminalsJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "a, b, c...",
			"1, 2, 3...", "x, y, z...", "t0, t1, t2", "p0, p1, p2...", "i, ii, iii, iv...", "1, 10, 11, 100.." }));
		type2InputGrammarTerminalsJComboBox.setSelectedIndex(2);
		type2InputGrammarJPanel.add(type2InputGrammarTerminalsJComboBox);
		type2InputGrammarTerminalsJComboBox.setBounds(340, 30, 130, 21);

		type2InputGrammarVariablesJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputGrammarVariablesJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "A, B, C...",
			"X, Y, Z...", "q0, q1, q2...", "s0, s1, s2...", "I, II, III, IV..." }));
		type2InputGrammarJPanel.add(type2InputGrammarVariablesJComboBox);
		type2InputGrammarVariablesJComboBox.setBounds(340, 60, 130, 21);

		type2InputGrammarJPanel.setBounds(0, 0, 520, 130);
		type2JLayeredPane.add(type2InputGrammarJPanel, new Integer(1));

		type2OutputAutomatonJPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Output automaton",
			javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
			new java.awt.Font("Lucida Sans", 0, 12)));
		type2OutputAutomatonJPanel.setLayout(null);

		type2OutputAutomatonAlphabetJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputAutomatonAlphabetJLabel.setText("Alphabet");
		type2OutputAutomatonJPanel.add(type2OutputAutomatonAlphabetJLabel);
		type2OutputAutomatonAlphabetJLabel.setBounds(10, 30, 60, 15);

		type2OutputAutomatonAlphabetMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputAutomatonAlphabetMinJLabel.setText("min");
		type2OutputAutomatonJPanel.add(type2OutputAutomatonAlphabetMinJLabel);
		type2OutputAutomatonAlphabetMinJLabel.setBounds(100, 30, 30, 15);

		type2OutputAutomatonAlphabetMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputAutomatonAlphabetMaxJLabel.setText("max");
		type2OutputAutomatonJPanel.add(type2OutputAutomatonAlphabetMaxJLabel);
		type2OutputAutomatonAlphabetMaxJLabel.setBounds(210, 30, 30, 15);

		type2OutputAutomatonAlphabetMinJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type2OutputAutomatonJPanel.add(type2OutputAutomatonAlphabetMinJTextField);
		type2OutputAutomatonAlphabetMinJTextField.setBounds(130, 30, 60, 20);

		type2OutputAutomatonAlphabetMaxJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type2OutputAutomatonJPanel.add(type2OutputAutomatonAlphabetMaxJTextField);
		type2OutputAutomatonAlphabetMaxJTextField.setBounds(240, 30, 60, 20);

		type2OutputAutomatonStatesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputAutomatonStatesJLabel.setText("States");
		type2OutputAutomatonJPanel.add(type2OutputAutomatonStatesJLabel);
		type2OutputAutomatonStatesJLabel.setBounds(10, 60, 60, 15);

		type2OutputAutomatonTransitionsJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputAutomatonTransitionsJLabel.setText("Transitions");
		type2OutputAutomatonJPanel.add(type2OutputAutomatonTransitionsJLabel);
		type2OutputAutomatonTransitionsJLabel.setBounds(10, 90, 80, 15);

		type2OutputAutomatonStatesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputAutomatonStatesMinJLabel.setText("min");
		type2OutputAutomatonJPanel.add(type2OutputAutomatonStatesMinJLabel);
		type2OutputAutomatonStatesMinJLabel.setBounds(100, 60, 30, 15);

		type2OutputAutomatonTransitionsMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputAutomatonTransitionsMinJLabel.setText("min");
		type2OutputAutomatonJPanel.add(type2OutputAutomatonTransitionsMinJLabel);
		type2OutputAutomatonTransitionsMinJLabel.setBounds(100, 90, 30, 15);

		type2OutputAutomatonStatesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputAutomatonStatesMaxJLabel.setText("max");
		type2OutputAutomatonJPanel.add(type2OutputAutomatonStatesMaxJLabel);
		type2OutputAutomatonStatesMaxJLabel.setBounds(210, 60, 30, 15);

		type2OutputAutomatonTransitionsMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputAutomatonTransitionsMaxJLabel.setText("max");
		type2OutputAutomatonJPanel.add(type2OutputAutomatonTransitionsMaxJLabel);
		type2OutputAutomatonTransitionsMaxJLabel.setBounds(210, 90, 30, 15);

		type2OutputAutomatonStatesMinJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type2OutputAutomatonJPanel.add(type2OutputAutomatonStatesMinJTextField);
		type2OutputAutomatonStatesMinJTextField.setBounds(130, 60, 60, 20);

		type2OutputAutomatonTransitionsMinJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type2OutputAutomatonJPanel.add(type2OutputAutomatonTransitionsMinJTextField);
		type2OutputAutomatonTransitionsMinJTextField.setBounds(130, 90, 60, 20);

		type2OutputAutomatonStatesMaxJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type2OutputAutomatonJPanel.add(type2OutputAutomatonStatesMaxJTextField);
		type2OutputAutomatonStatesMaxJTextField.setBounds(240, 60, 60, 20);

		type2OutputAutomatonTransitionsMaxJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type2OutputAutomatonJPanel.add(type2OutputAutomatonTransitionsMaxJTextField);
		type2OutputAutomatonTransitionsMaxJTextField.setBounds(240, 90, 60, 20);

		type2OutputAutomatonUnreachableStates1JLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputAutomatonUnreachableStates1JLabel.setText("Unreachable");
		type2OutputAutomatonJPanel.add(type2OutputAutomatonUnreachableStates1JLabel);
		type2OutputAutomatonUnreachableStates1JLabel.setBounds(10, 120, 80, 15);

		type2OutputAutomatonUnreachableStatesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputAutomatonUnreachableStatesMinJLabel.setText("min");
		type2OutputAutomatonJPanel.add(type2OutputAutomatonUnreachableStatesMinJLabel);
		type2OutputAutomatonUnreachableStatesMinJLabel.setBounds(100, 120, 30, 15);

		type2OutputAutomatonUnreachableStatesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputAutomatonUnreachableStatesMaxJLabel.setText("max");
		type2OutputAutomatonJPanel.add(type2OutputAutomatonUnreachableStatesMaxJLabel);
		type2OutputAutomatonUnreachableStatesMaxJLabel.setBounds(210, 120, 30, 15);

		type2OutputAutomatonUnreachableStatesMinJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type2OutputAutomatonJPanel.add(type2OutputAutomatonUnreachableStatesMinJTextField);
		type2OutputAutomatonUnreachableStatesMinJTextField.setBounds(130, 120, 60, 20);

		type2OutputAutomatonUnreachableStatesMaxJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type2OutputAutomatonJPanel.add(type2OutputAutomatonUnreachableStatesMaxJTextField);
		type2OutputAutomatonUnreachableStatesMaxJTextField.setBounds(240, 120, 60, 20);

		type2OutputAutomatonUnreachableStates2JLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputAutomatonUnreachableStates2JLabel.setText("states");
		type2OutputAutomatonJPanel.add(type2OutputAutomatonUnreachableStates2JLabel);
		type2OutputAutomatonUnreachableStates2JLabel.setBounds(10, 140, 50, 15);

		type2OutputAutomatonJPanel.setBounds(0, 130, 520, 170);
		type2JLayeredPane.add(type2OutputAutomatonJPanel, new Integer(1));

		type2InputAutomatonJPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Input automaton",
			javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
			new java.awt.Font("Lucida Sans", 0, 12)));
		type2InputAutomatonJPanel.setLayout(null);

		type2InputAutomatonAlphabetJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonAlphabetJLabel.setText("Alphabet");
		type2InputAutomatonJPanel.add(type2InputAutomatonAlphabetJLabel);
		type2InputAutomatonAlphabetJLabel.setBounds(10, 30, 70, 15);

		type2InputAutomatonStatesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonStatesJLabel.setText("States");
		type2InputAutomatonJPanel.add(type2InputAutomatonStatesJLabel);
		type2InputAutomatonStatesJLabel.setBounds(10, 60, 70, 15);

		type2InputAutomatonTransitionsJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonTransitionsJLabel.setText("Transitions");
		type2InputAutomatonJPanel.add(type2InputAutomatonTransitionsJLabel);
		type2InputAutomatonTransitionsJLabel.setBounds(10, 120, 70, 15);

		type2InputAutomatonFinalStatesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonFinalStatesJLabel.setText("Final states");
		type2InputAutomatonJPanel.add(type2InputAutomatonFinalStatesJLabel);
		type2InputAutomatonFinalStatesJLabel.setBounds(10, 90, 70, 20);

		type2InputAutomatonAlphabetMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonAlphabetMinJLabel.setText("min");
		type2InputAutomatonJPanel.add(type2InputAutomatonAlphabetMinJLabel);
		type2InputAutomatonAlphabetMinJLabel.setBounds(100, 30, 30, 15);

		type2InputAutomatonStatesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonStatesMinJLabel.setText("min");
		type2InputAutomatonJPanel.add(type2InputAutomatonStatesMinJLabel);
		type2InputAutomatonStatesMinJLabel.setBounds(100, 60, 30, 15);

		type2InputAutomatonFinalStatesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonFinalStatesMinJLabel.setText("min");
		type2InputAutomatonJPanel.add(type2InputAutomatonFinalStatesMinJLabel);
		type2InputAutomatonFinalStatesMinJLabel.setBounds(100, 90, 30, 15);

		type2InputAutomatonTransitionsMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonTransitionsMinJLabel.setText("min");
		type2InputAutomatonJPanel.add(type2InputAutomatonTransitionsMinJLabel);
		type2InputAutomatonTransitionsMinJLabel.setBounds(100, 120, 30, 15);

		type2InputAutomatonAlphabetMinJTextField.setText("1");
		type2InputAutomatonJPanel.add(type2InputAutomatonAlphabetMinJTextField);
		type2InputAutomatonAlphabetMinJTextField.setBounds(130, 30, 60, 20);

		type2InputAutomatonStatesMinJTextField.setText("1");
		type2InputAutomatonJPanel.add(type2InputAutomatonStatesMinJTextField);
		type2InputAutomatonStatesMinJTextField.setBounds(130, 60, 60, 20);

		type2InputAutomatonFinalStatesMinJTextField.setText("1");
		type2InputAutomatonJPanel.add(type2InputAutomatonFinalStatesMinJTextField);
		type2InputAutomatonFinalStatesMinJTextField.setBounds(130, 90, 60, 20);

		type2InputAutomatonTransitionsMinJTextField.setText("2");
		type2InputAutomatonJPanel.add(type2InputAutomatonTransitionsMinJTextField);
		type2InputAutomatonTransitionsMinJTextField.setBounds(130, 120, 60, 20);

		type2InputAutomatonAlphabetMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonAlphabetMaxJLabel.setText("max");
		type2InputAutomatonJPanel.add(type2InputAutomatonAlphabetMaxJLabel);
		type2InputAutomatonAlphabetMaxJLabel.setBounds(210, 30, 30, 15);

		type2InputAutomatonStatesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonStatesMaxJLabel.setText("max");
		type2InputAutomatonJPanel.add(type2InputAutomatonStatesMaxJLabel);
		type2InputAutomatonStatesMaxJLabel.setBounds(210, 60, 30, 15);

		type2InputAutomatonFinalStatesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonFinalStatesMaxJLabel.setText("max");
		type2InputAutomatonJPanel.add(type2InputAutomatonFinalStatesMaxJLabel);
		type2InputAutomatonFinalStatesMaxJLabel.setBounds(210, 90, 30, 15);

		type2InputAutomatonTransitionsMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonTransitionsMaxJLabel.setText("max");
		type2InputAutomatonJPanel.add(type2InputAutomatonTransitionsMaxJLabel);
		type2InputAutomatonTransitionsMaxJLabel.setBounds(210, 120, 30, 15);

		type2InputAutomatonAlphabetMaxJTextField.setText("3");
		type2InputAutomatonJPanel.add(type2InputAutomatonAlphabetMaxJTextField);
		type2InputAutomatonAlphabetMaxJTextField.setBounds(240, 30, 60, 20);

		type2InputAutomatonStatesMaxJTextField.setText("4");
		type2InputAutomatonJPanel.add(type2InputAutomatonStatesMaxJTextField);
		type2InputAutomatonStatesMaxJTextField.setBounds(240, 60, 60, 20);

		type2InputAutomatonFinalStatesMaxJTextField.setText("2");
		type2InputAutomatonJPanel.add(type2InputAutomatonFinalStatesMaxJTextField);
		type2InputAutomatonFinalStatesMaxJTextField.setBounds(240, 90, 60, 20);

		type2InputAutomatonTransitionsMaxJTextField.setText("6");
		type2InputAutomatonJPanel.add(type2InputAutomatonTransitionsMaxJTextField);
		type2InputAutomatonTransitionsMaxJTextField.setBounds(240, 120, 60, 20);

		type2InputAutomatonAlphabetJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonAlphabetJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "a, b, c...",
			"A, B, C...", "1, 2, 3...", "x, y, z ...", "X, Y, Z ...", "t0, t1, t2...", "p0, p1, p2..." }));
		type2InputAutomatonJPanel.add(type2InputAutomatonAlphabetJComboBox);
		type2InputAutomatonAlphabetJComboBox.setBounds(340, 30, 130, 21);

		type2InputAutomatonStatesJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonStatesJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "a, b, c...",
			"A, B, C...", "1, 2, 3...", "x, y, z...", "X, Y, Z ...", "q0, q1, q2...", "s0, s1, s2..." }));
		type2InputAutomatonStatesJComboBox.setSelectedIndex(1);
		type2InputAutomatonJPanel.add(type2InputAutomatonStatesJComboBox);
		type2InputAutomatonStatesJComboBox.setBounds(340, 60, 130, 21);

		type2InputAutomatonUnreachableStates1JLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonUnreachableStates1JLabel.setText("Unreachable");
		type2InputAutomatonJPanel.add(type2InputAutomatonUnreachableStates1JLabel);
		type2InputAutomatonUnreachableStates1JLabel.setBounds(10, 150, 80, 15);

		type2InputAutomatonUnreachableStates2JLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonUnreachableStates2JLabel.setText("states");
		type2InputAutomatonJPanel.add(type2InputAutomatonUnreachableStates2JLabel);
		type2InputAutomatonUnreachableStates2JLabel.setBounds(10, 170, 50, 15);

		type2InputAutomatonUnreachableStatesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonUnreachableStatesMinJLabel.setText("min");
		type2InputAutomatonJPanel.add(type2InputAutomatonUnreachableStatesMinJLabel);
		type2InputAutomatonUnreachableStatesMinJLabel.setBounds(100, 150, 30, 15);

		type2InputAutomatonUnreachableStatesMinJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type2InputAutomatonJPanel.add(type2InputAutomatonUnreachableStatesMinJTextField);
		type2InputAutomatonUnreachableStatesMinJTextField.setBounds(130, 150, 60, 20);

		type2InputAutomatonUnreachableStatesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonUnreachableStatesMaxJLabel.setText("max");
		type2InputAutomatonJPanel.add(type2InputAutomatonUnreachableStatesMaxJLabel);
		type2InputAutomatonUnreachableStatesMaxJLabel.setBounds(210, 150, 40, 15);

		type2InputAutomatonUnreachableStatesMaxJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type2InputAutomatonJPanel.add(type2InputAutomatonUnreachableStatesMaxJTextField);
		type2InputAutomatonUnreachableStatesMaxJTextField.setBounds(240, 150, 60, 20);

		type2InputAutomatonJPanel.setBounds(0, 0, 520, 200);
		type2JLayeredPane.add(type2InputAutomatonJPanel, javax.swing.JLayeredPane.DEFAULT_LAYER);

		type2OutputGrammarJPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Output regular grammar",
			javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
			new java.awt.Font("Lucida Sans", 0, 12)));
		type2OutputGrammarJPanel.setLayout(null);

		type2OutputGrammarVariablesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputGrammarVariablesJLabel.setText("Non-terminals");
		type2OutputGrammarJPanel.add(type2OutputGrammarVariablesJLabel);
		type2OutputGrammarVariablesJLabel.setBounds(10, 30, 90, 15);

		type2OutputGrammarTerminalsJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputGrammarTerminalsJLabel.setText("Terminals");
		type2OutputGrammarJPanel.add(type2OutputGrammarTerminalsJLabel);
		type2OutputGrammarTerminalsJLabel.setBounds(10, 60, 60, 15);

		type2OutputGrammarRulesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputGrammarRulesJLabel.setText("Rules");
		type2OutputGrammarJPanel.add(type2OutputGrammarRulesJLabel);
		type2OutputGrammarRulesJLabel.setBounds(10, 90, 60, 15);

		type2OutputGrammarVariablesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputGrammarVariablesMinJLabel.setText("min");
		type2OutputGrammarJPanel.add(type2OutputGrammarVariablesMinJLabel);
		type2OutputGrammarVariablesMinJLabel.setBounds(100, 30, 30, 15);

		type2OutputGrammarTerminalsMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputGrammarTerminalsMinJLabel.setText("min");
		type2OutputGrammarJPanel.add(type2OutputGrammarTerminalsMinJLabel);
		type2OutputGrammarTerminalsMinJLabel.setBounds(100, 60, 30, 15);

		type2OutputGrammarRulesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputGrammarRulesMinJLabel.setText("min");
		type2OutputGrammarJPanel.add(type2OutputGrammarRulesMinJLabel);
		type2OutputGrammarRulesMinJLabel.setBounds(100, 90, 30, 15);

		type2OutputGrammarVariablesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputGrammarVariablesMaxJLabel.setText("max");
		type2OutputGrammarJPanel.add(type2OutputGrammarVariablesMaxJLabel);
		type2OutputGrammarVariablesMaxJLabel.setBounds(210, 30, 30, 15);

		type2OutputGrammarTerminalsMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputGrammarTerminalsMaxJLabel.setText("max");
		type2OutputGrammarJPanel.add(type2OutputGrammarTerminalsMaxJLabel);
		type2OutputGrammarTerminalsMaxJLabel.setBounds(210, 60, 30, 15);

		type2OutputGrammarRulesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputGrammarRulesMaxJLabel.setText("max");
		type2OutputGrammarJPanel.add(type2OutputGrammarRulesMaxJLabel);
		type2OutputGrammarRulesMaxJLabel.setBounds(210, 90, 30, 15);

		type2OutputGrammarVariablesMinJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type2OutputGrammarJPanel.add(type2OutputGrammarVariablesMinJTextField);
		type2OutputGrammarVariablesMinJTextField.setBounds(130, 30, 60, 20);

		type2OutputGrammarTerminalsMinJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type2OutputGrammarJPanel.add(type2OutputGrammarTerminalsMinJTextField);
		type2OutputGrammarTerminalsMinJTextField.setBounds(130, 60, 60, 20);

		type2OutputGrammarRulesMinJTextField.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(
			153, 255, 102)));
		type2OutputGrammarJPanel.add(type2OutputGrammarRulesMinJTextField);
		type2OutputGrammarRulesMinJTextField.setBounds(130, 90, 60, 20);

		type2OutputGrammarVariablesMaxJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type2OutputGrammarJPanel.add(type2OutputGrammarVariablesMaxJTextField);
		type2OutputGrammarVariablesMaxJTextField.setBounds(240, 30, 60, 20);

		type2OutputGrammarTerminalsMaxJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type2OutputGrammarJPanel.add(type2OutputGrammarTerminalsMaxJTextField);
		type2OutputGrammarTerminalsMaxJTextField.setBounds(240, 60, 60, 20);

		type2OutputGrammarRulesMaxJTextField.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(
			153, 255, 102)));
		type2OutputGrammarJPanel.add(type2OutputGrammarRulesMaxJTextField);
		type2OutputGrammarRulesMaxJTextField.setBounds(240, 90, 60, 20);

		type2OutputGRammarEpsilonJCheckBox.setFont(new java.awt.Font("Lucida Sans", 0, 12)); // NOI18N
		type2OutputGRammarEpsilonJCheckBox.setText("epsilon rule");
		type2OutputGrammarJPanel.add(type2OutputGRammarEpsilonJCheckBox);
		type2OutputGRammarEpsilonJCheckBox.setBounds(340, 90, 110, 23);

		type2OutputGrammarJPanel.setBounds(0, 200, 520, 130);
		type2JLayeredPane.add(type2OutputGrammarJPanel, new Integer(1));

		type2JPanel.add(type2JLayeredPane);
		type2JLayeredPane.setBounds(0, 40, 530, 330);

		type2JPanel.setBounds(0, 0, 530, 450);
		typeJLayeredPane.add(type2JPanel, new Integer(2));

		type3JPanel.setLayout(null);

		type3OperationJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3OperationJLabel.setText("Operation");
		type3JPanel.add(type3OperationJLabel);
		type3OperationJLabel.setBounds(10, 10, 80, 15);

		type3OperationJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3OperationJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] {
			"DFA -> regular expression", "regular expression -> NFA with ε-transitions" }));
		type3OperationJComboBox.addActionListener(new java.awt.event.ActionListener()
		{
			public void actionPerformed(java.awt.event.ActionEvent evt)
			{
				type3OperationJComboBoxActionPerformed(evt);
			}
		});
		type3JPanel.add(type3OperationJComboBox);
		type3OperationJComboBox.setBounds(110, 10, 290, 21);

		type3InputAutomatonJPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Input automaton",
			javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
			new java.awt.Font("Lucida Sans", 0, 12)));
		type3InputAutomatonJPanel.setLayout(null);

		type3InputAutomatonStatesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputAutomatonStatesJLabel.setText("States");
		type3InputAutomatonJPanel.add(type3InputAutomatonStatesJLabel);
		type3InputAutomatonStatesJLabel.setBounds(10, 60, 60, 15);

		type3InputAutomatonStatesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputAutomatonStatesMinJLabel.setText("min");
		type3InputAutomatonJPanel.add(type3InputAutomatonStatesMinJLabel);
		type3InputAutomatonStatesMinJLabel.setBounds(100, 60, 30, 15);

		type3InputAutomatonStatesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputAutomatonStatesMaxJLabel.setText("max");
		type3InputAutomatonJPanel.add(type3InputAutomatonStatesMaxJLabel);
		type3InputAutomatonStatesMaxJLabel.setBounds(210, 60, 30, 15);

		type3InputAutomatonFinalStatesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputAutomatonFinalStatesJLabel.setText("Final States");
		type3InputAutomatonJPanel.add(type3InputAutomatonFinalStatesJLabel);
		type3InputAutomatonFinalStatesJLabel.setBounds(10, 90, 70, 15);

		type3InputAutomatonFinalStatesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputAutomatonFinalStatesMinJLabel.setText("min");
		type3InputAutomatonJPanel.add(type3InputAutomatonFinalStatesMinJLabel);
		type3InputAutomatonFinalStatesMinJLabel.setBounds(100, 90, 30, 15);

		type3InputAutomatonFinalStatesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputAutomatonFinalStatesMaxJLabel.setText("max");
		type3InputAutomatonJPanel.add(type3InputAutomatonFinalStatesMaxJLabel);
		type3InputAutomatonFinalStatesMaxJLabel.setBounds(210, 90, 34, 15);

		type3InputAutomatonTransitionsJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputAutomatonTransitionsJLabel.setText("Transitions");
		type3InputAutomatonJPanel.add(type3InputAutomatonTransitionsJLabel);
		type3InputAutomatonTransitionsJLabel.setBounds(10, 120, 80, 15);

		type3InputAutomatonTransitionsMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputAutomatonTransitionsMinJLabel.setText("min");
		type3InputAutomatonJPanel.add(type3InputAutomatonTransitionsMinJLabel);
		type3InputAutomatonTransitionsMinJLabel.setBounds(100, 120, 30, 15);

		type3InputAutomatonTransitionsMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputAutomatonTransitionsMaxJLabel.setText("max");
		type3InputAutomatonJPanel.add(type3InputAutomatonTransitionsMaxJLabel);
		type3InputAutomatonTransitionsMaxJLabel.setBounds(210, 120, 30, 15);

		type3InputAutomatonAlphabetJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputAutomatonAlphabetJLabel.setText("Alphabet");
		type3InputAutomatonJPanel.add(type3InputAutomatonAlphabetJLabel);
		type3InputAutomatonAlphabetJLabel.setBounds(10, 30, 60, 15);

		type3InputAutomatonAlphabetMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputAutomatonAlphabetMinJLabel.setText("min");
		type3InputAutomatonJPanel.add(type3InputAutomatonAlphabetMinJLabel);
		type3InputAutomatonAlphabetMinJLabel.setBounds(100, 30, 30, 15);

		type3InputAutomatonAlphabetMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputAutomatonAlphabetMaxJLabel.setText("max");
		type3InputAutomatonJPanel.add(type3InputAutomatonAlphabetMaxJLabel);
		type3InputAutomatonAlphabetMaxJLabel.setBounds(210, 30, 30, 15);

		type3InputAutomatonStatesMinJTextField.setText("1");
		type3InputAutomatonJPanel.add(type3InputAutomatonStatesMinJTextField);
		type3InputAutomatonStatesMinJTextField.setBounds(130, 60, 60, 20);

		type3InputAutomatonStatesMaxJTextField.setText("3");
		type3InputAutomatonJPanel.add(type3InputAutomatonStatesMaxJTextField);
		type3InputAutomatonStatesMaxJTextField.setBounds(240, 60, 60, 20);

		type3InputAutomatonFinalStatesMinJTextField.setText("1");
		type3InputAutomatonJPanel.add(type3InputAutomatonFinalStatesMinJTextField);
		type3InputAutomatonFinalStatesMinJTextField.setBounds(130, 90, 60, 20);

		type3InputAutomatonFinalStatesMaxJTextField.setText("2");
		type3InputAutomatonJPanel.add(type3InputAutomatonFinalStatesMaxJTextField);
		type3InputAutomatonFinalStatesMaxJTextField.setBounds(240, 90, 60, 20);

		type3InputAutomatonTransitionsMinJTextField.setText("3");
		type3InputAutomatonJPanel.add(type3InputAutomatonTransitionsMinJTextField);
		type3InputAutomatonTransitionsMinJTextField.setBounds(130, 120, 60, 20);

		type3InputAutomatonTransitionsMaxJTextField.setText("6");
		type3InputAutomatonJPanel.add(type3InputAutomatonTransitionsMaxJTextField);
		type3InputAutomatonTransitionsMaxJTextField.setBounds(240, 120, 60, 20);

		type3InputAutomatonAlphabetMinJTextField.setText("2");
		type3InputAutomatonJPanel.add(type3InputAutomatonAlphabetMinJTextField);
		type3InputAutomatonAlphabetMinJTextField.setBounds(130, 30, 60, 20);

		type3InputAutomatonAlphabetMaxJTextField.setText("2");
		type3InputAutomatonJPanel.add(type3InputAutomatonAlphabetMaxJTextField);
		type3InputAutomatonAlphabetMaxJTextField.setBounds(240, 30, 60, 20);

		type3InputAutomatonAlphabetJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputAutomatonAlphabetJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "a, b, c...",
			"A, B, C...", "1, 2, 3...", "x, y, z...", "X, Y, Z...", "t0, t1, t2...", "p0, p1, p2...",
			"I, II, III, IV...", "i, ii, iii, iv...", "1, 10, 11, 100..." }));
		type3InputAutomatonJPanel.add(type3InputAutomatonAlphabetJComboBox);
		type3InputAutomatonAlphabetJComboBox.setBounds(340, 30, 130, 21);

		type3InputAutomatonStatesJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputAutomatonStatesJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "a, b, c...",
			"A, B, C...", "1, 2, 3...", "x, y, z...", "X, Y, Z...", "q0, q1, q2...", "s0, s1, s2...",
			"I, II, III, IV...", "i, ii, iii, iv...", "1, 10, 11, 100..." }));
		type3InputAutomatonStatesJComboBox.setSelectedIndex(6);
		type3InputAutomatonJPanel.add(type3InputAutomatonStatesJComboBox);
		type3InputAutomatonStatesJComboBox.setBounds(340, 60, 130, 21);

		type3InputAutomatonJPanel.setBounds(0, 0, 520, 150);
		type3jLayeredPane.add(type3InputAutomatonJPanel, javax.swing.JLayeredPane.DEFAULT_LAYER);

		type3InputREJPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Input regular expression",
			javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
			new java.awt.Font("Lucida Sans", 0, 12)));
		type3InputREJPanel.setLayout(null);

		type3InputREAlphabetJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputREAlphabetJLabel.setText("Alphabet");
		type3InputREJPanel.add(type3InputREAlphabetJLabel);
		type3InputREAlphabetJLabel.setBounds(10, 30, 60, 15);

		type3InputREAlphabetMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputREAlphabetMinJLabel.setText("min");
		type3InputREJPanel.add(type3InputREAlphabetMinJLabel);
		type3InputREAlphabetMinJLabel.setBounds(100, 30, 30, 15);

		type3InputREAlphabetMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputREAlphabetMaxJLabel.setText("max");
		type3InputREJPanel.add(type3InputREAlphabetMaxJLabel);
		type3InputREAlphabetMaxJLabel.setBounds(210, 30, 30, 15);

		type3InputREAlphabetMinJTextField.setText("2");
		type3InputREJPanel.add(type3InputREAlphabetMinJTextField);
		type3InputREAlphabetMinJTextField.setBounds(130, 30, 60, 20);

		type3InputREAlphabetMaxJTextField.setText("4");
		type3InputREJPanel.add(type3InputREAlphabetMaxJTextField);
		type3InputREAlphabetMaxJTextField.setBounds(240, 30, 60, 20);

		type3InputReAlphabetJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputReAlphabetJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "a, b, c...",
			"A, B, C...", "1, 2, 3...", "x, y, x...", "X, Y, Z...", "t0, t1, t2...", "p0, p1, p2..." }));
		type3InputREJPanel.add(type3InputReAlphabetJComboBox);
		type3InputReAlphabetJComboBox.setBounds(340, 30, 130, 21);

		type3InputRELengthJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputRELengthJLabel.setText("Length");
		type3InputREJPanel.add(type3InputRELengthJLabel);
		type3InputRELengthJLabel.setBounds(10, 60, 70, 15);

		type3InputRELengthMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputRELengthMinJLabel.setText("min");
		type3InputREJPanel.add(type3InputRELengthMinJLabel);
		type3InputRELengthMinJLabel.setBounds(100, 60, 30, 15);

		type3InputRELengthMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputRELengthMaxJLabel.setText("max");
		type3InputREJPanel.add(type3InputRELengthMaxJLabel);
		type3InputRELengthMaxJLabel.setBounds(210, 60, 30, 15);

		type3InputRELengthMinJTextField.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(153,
			255, 102)));
		type3InputREJPanel.add(type3InputRELengthMinJTextField);
		type3InputRELengthMinJTextField.setBounds(130, 60, 60, 20);

		type3InputRELengthMaxJTextField.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(153,
			255, 102)));
		type3InputREJPanel.add(type3InputRELengthMaxJTextField);
		type3InputRELengthMaxJTextField.setBounds(240, 60, 60, 20);

		type3InputREJPanel.setBounds(0, 0, 520, 100);
		type3jLayeredPane.add(type3InputREJPanel, new Integer(1));

		type3OutputAutomatonJPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Output automaton",
			javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
			new java.awt.Font("Lucida Sans", 0, 12)));
		type3OutputAutomatonJPanel.setLayout(null);

		type3OutputAutomatonStatesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3OutputAutomatonStatesJLabel.setText("States");
		type3OutputAutomatonJPanel.add(type3OutputAutomatonStatesJLabel);
		type3OutputAutomatonStatesJLabel.setBounds(10, 30, 60, 15);

		type3OutputAutomatonStatesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3OutputAutomatonStatesMinJLabel.setText("min");
		type3OutputAutomatonJPanel.add(type3OutputAutomatonStatesMinJLabel);
		type3OutputAutomatonStatesMinJLabel.setBounds(100, 30, 30, 15);

		type3OutputAutomatonStatesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3OutputAutomatonStatesMaxJLabel.setText("max");
		type3OutputAutomatonJPanel.add(type3OutputAutomatonStatesMaxJLabel);
		type3OutputAutomatonStatesMaxJLabel.setBounds(210, 30, 30, 15);

		type3OutputAutomatonTransitionsJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3OutputAutomatonTransitionsJLabel.setText("Transitions");
		type3OutputAutomatonJPanel.add(type3OutputAutomatonTransitionsJLabel);
		type3OutputAutomatonTransitionsJLabel.setBounds(10, 60, 80, 15);

		type3OutputAutomatonTransitionsMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3OutputAutomatonTransitionsMinJLabel.setText("min");
		type3OutputAutomatonJPanel.add(type3OutputAutomatonTransitionsMinJLabel);
		type3OutputAutomatonTransitionsMinJLabel.setBounds(100, 60, 30, 15);

		type3OutputAutomatonTransitionsMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3OutputAutomatonTransitionsMaxJLabel.setText("max");
		type3OutputAutomatonJPanel.add(type3OutputAutomatonTransitionsMaxJLabel);
		type3OutputAutomatonTransitionsMaxJLabel.setBounds(210, 60, 30, 15);

		type3OutputAutomatonStatesMinJTextField.setText("2");
		type3OutputAutomatonJPanel.add(type3OutputAutomatonStatesMinJTextField);
		type3OutputAutomatonStatesMinJTextField.setBounds(130, 30, 60, 20);

		type3OutputAutomatonTransitionsMinJTextField.setText("2");
		type3OutputAutomatonJPanel.add(type3OutputAutomatonTransitionsMinJTextField);
		type3OutputAutomatonTransitionsMinJTextField.setBounds(130, 60, 60, 20);

		type3OutputAutomatonStatesMaxJTextField.setText("6");
		type3OutputAutomatonJPanel.add(type3OutputAutomatonStatesMaxJTextField);
		type3OutputAutomatonStatesMaxJTextField.setBounds(240, 30, 60, 20);

		type3OutputAutomatonTransitionsMaxJTextField.setText("10");
		type3OutputAutomatonJPanel.add(type3OutputAutomatonTransitionsMaxJTextField);
		type3OutputAutomatonTransitionsMaxJTextField.setBounds(240, 60, 60, 20);

		type3OutputAutomatonStatesJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3OutputAutomatonStatesJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "a, b, c...",
			"A, B, C...", "1, 2, 3...", "x, y, z...", "X, Y, Z...", "q0, q1, q2...", "s0, s1, s2....",
			"I, II, III, IV...", "i, ii, iii, iv...", "1, 10, 11, 100..." }));
		type3OutputAutomatonStatesJComboBox.setSelectedIndex(6);
		type3OutputAutomatonJPanel.add(type3OutputAutomatonStatesJComboBox);
		type3OutputAutomatonStatesJComboBox.setBounds(340, 30, 130, 21);

		type3OutputAutomatonJPanel.setBounds(0, 100, 520, 140);
		type3jLayeredPane.add(type3OutputAutomatonJPanel, new Integer(1));

		type3OutputREJPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Output regular expression",
			javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
			new java.awt.Font("Lucida Sans", 0, 12)));
		type3OutputREJPanel.setLayout(null);

		type3OutputREAlphabetJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3OutputREAlphabetJLabel.setText("Alphabet");
		type3OutputREJPanel.add(type3OutputREAlphabetJLabel);
		type3OutputREAlphabetJLabel.setBounds(10, 30, 80, 15);

		type3OutputREAlphabetMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3OutputREAlphabetMinJLabel.setText("min");
		type3OutputREJPanel.add(type3OutputREAlphabetMinJLabel);
		type3OutputREAlphabetMinJLabel.setBounds(100, 30, 30, 15);

		type3OutputREAlphabetMinJTextField.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(153,
			255, 102)));
		type3OutputREJPanel.add(type3OutputREAlphabetMinJTextField);
		type3OutputREAlphabetMinJTextField.setBounds(130, 30, 60, 20);

		type3OutputREAlphabetMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3OutputREAlphabetMaxJLabel.setText("max");
		type3OutputREJPanel.add(type3OutputREAlphabetMaxJLabel);
		type3OutputREAlphabetMaxJLabel.setBounds(210, 30, 30, 15);

		type3OutputREAlphabetMaxJTextField.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(153,
			255, 102)));
		type3OutputREJPanel.add(type3OutputREAlphabetMaxJTextField);
		type3OutputREAlphabetMaxJTextField.setBounds(240, 30, 60, 20);

		type3OutputRELengthJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3OutputRELengthJLabel.setText("Length");
		type3OutputREJPanel.add(type3OutputRELengthJLabel);
		type3OutputRELengthJLabel.setBounds(10, 60, 60, 15);

		type3OutputRELengthMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3OutputRELengthMinJLabel.setText("min");
		type3OutputREJPanel.add(type3OutputRELengthMinJLabel);
		type3OutputRELengthMinJLabel.setBounds(100, 60, 30, 15);

		type3OutputRELengthMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3OutputRELengthMaxJLabel.setText("max");
		type3OutputREJPanel.add(type3OutputRELengthMaxJLabel);
		type3OutputRELengthMaxJLabel.setBounds(210, 60, 30, 15);

		type3OutputRELengthMinJTextField.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(153,
			255, 102)));
		type3OutputREJPanel.add(type3OutputRELengthMinJTextField);
		type3OutputRELengthMinJTextField.setBounds(130, 60, 60, 20);

		type3OutputRELengthMaxJTextField.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(153,
			255, 102)));
		type3OutputREJPanel.add(type3OutputRELengthMaxJTextField);
		type3OutputRELengthMaxJTextField.setBounds(240, 60, 60, 20);

		type3OutputREJPanel.setBounds(0, 150, 520, 90);
		type3jLayeredPane.add(type3OutputREJPanel, javax.swing.JLayeredPane.DEFAULT_LAYER);

		type3JPanel.add(type3jLayeredPane);
		type3jLayeredPane.setBounds(0, 50, 520, 250);

		type3JPanel.setBounds(0, 0, 530, 450);
		typeJLayeredPane.add(type3JPanel, new Integer(3));

		getContentPane().add(typeJLayeredPane);
		typeJLayeredPane.setBounds(30, 40, 530, 460);

		generatingJPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Generating",
			javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
			new java.awt.Font("Lucida Sans", 0, 12)));
		generatingJPanel.setLayout(null);

		exercisesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		exercisesJLabel.setText("Number of exercises");
		generatingJPanel.add(exercisesJLabel);
		exercisesJLabel.setBounds(10, 20, 120, 20);

		exercisesJTextField.setText("1");
		exercisesJTextField.setName("Result: number of examples");
		generatingJPanel.add(exercisesJTextField);
		exercisesJTextField.setBounds(150, 20, 60, 20);

		generateJButton.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		generateJButton.setText("GENERATE");
		generateJButton.addActionListener(new java.awt.event.ActionListener()
		{
			public void actionPerformed(java.awt.event.ActionEvent evt)
			{
				generateJButtonActionPerformed(evt);
			}
		});
		generatingJPanel.add(generateJButton);
		generateJButton.setBounds(400, 20, 100, 23);

		stopJButton.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		stopJButton.setText("STOP");
		stopJButton.addActionListener(new java.awt.event.ActionListener()
		{
			public void actionPerformed(java.awt.event.ActionEvent evt)
			{
				stopJButtonActionPerformed(evt);
			}
		});
		generatingJPanel.add(stopJButton);
		stopJButton.setBounds(400, 60, 100, 23);

		progressJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		progressJLabel.setText("Generating...");
		generatingJPanel.add(progressJLabel);
		progressJLabel.setBounds(10, 60, 130, 15);

		completedExercisesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		completedExercisesJLabel.setText("0 of 1");
		generatingJPanel.add(completedExercisesJLabel);
		completedExercisesJLabel.setBounds(150, 60, 90, 15);
		generatingJPanel.add(jProgressBar);
		jProgressBar.setBounds(150, 80, 146, 19);

		getContentPane().add(generatingJPanel);
		generatingJPanel.setBounds(30, 500, 520, 110);

		outputJTabbedPane.setFont(new java.awt.Font("Lucida Sans", 0, 12));

		plainTextJTextArea.setColumns(20);
		plainTextJTextArea.setFont(new java.awt.Font("DialogInput", 0, 12));
		plainTextJTextArea.setRows(5);
		plainTextJScrollPane.setViewportView(plainTextJTextArea);

		outputJTabbedPane.addTab("Plain text", plainTextJScrollPane);

		latexJTextArea.setColumns(20);
		latexJTextArea.setRows(5);
		latexJScrollPane.setViewportView(latexJTextArea);

		outputJTabbedPane.addTab("LaTeX", latexJScrollPane);

		isJTextArea.setColumns(20);
		isJTextArea.setRows(5);
		isJScrollPane.setViewportView(isJTextArea);

		outputJTabbedPane.addTab("IS", isJScrollPane);

		plainTextENJTextArea.setColumns(20);
		plainTextENJTextArea.setFont(new java.awt.Font("DialogInput", 0, 12));
		plainTextENJTextArea.setRows(5);
		plainTextENJScrollPane.setViewportView(plainTextENJTextArea);

		outputJTabbedPane.addTab("Plain text (EN)", plainTextENJScrollPane);

		latexENJTextArea.setColumns(20);
		latexENJTextArea.setRows(5);
		latexENJScrollPane.setViewportView(latexENJTextArea);

		outputJTabbedPane.addTab("LaTeX (EN)", latexENJScrollPane);

		isENJTextArea.setColumns(20);
		isENJTextArea.setRows(5);
		isENJScrollPane.setViewportView(isENJTextArea);

		outputJTabbedPane.addTab("IS (EN)", isENJScrollPane);

		getContentPane().add(outputJTabbedPane);
		outputJTabbedPane.setBounds(580, 10, 444, 550);

		copyAllJButton.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		copyAllJButton.setText("copy all");
		copyAllJButton.addActionListener(new java.awt.event.ActionListener()
		{
			public void actionPerformed(java.awt.event.ActionEvent evt)
			{
				copyAllJButtonActionPerformed(evt);
			}
		});
		getContentPane().add(copyAllJButton);
		copyAllJButton.setBounds(660, 580, 80, 23);

		saveJButton.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		saveJButton.setText("save as");
		saveJButton.addActionListener(new java.awt.event.ActionListener()
		{
			public void actionPerformed(java.awt.event.ActionEvent evt)
			{
				saveJButtonActionPerformed(evt);
			}
		});
		getContentPane().add(saveJButton);
		saveJButton.setBounds(750, 580, 80, 23);

		saveAllJButton.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		saveAllJButton.setText("save all as");
		saveAllJButton.addActionListener(new java.awt.event.ActionListener()
		{
			public void actionPerformed(java.awt.event.ActionEvent evt)
			{
				saveAllJButtonActionPerformed(evt);
			}
		});
		getContentPane().add(saveAllJButton);
		saveAllJButton.setBounds(840, 580, 100, 23);

		copyJButton.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		copyJButton.setText("copy");
		copyJButton.addActionListener(new java.awt.event.ActionListener()
		{
			public void actionPerformed(java.awt.event.ActionEvent evt)
			{
				copyJButtonActionPerformed(evt);
			}
		});
		getContentPane().add(copyJButton);
		copyJButton.setBounds(580, 580, 70, 23);

		pack();
	}// </editor-fold>//GEN-END:initComponents

	/**
	 * type of exercises is choosen
	 * 
	 * @param evt
	 *            the type of exercises is choosen in the combobox
	 */
	private void typeJComboBoxActionPerformed(java.awt.event.ActionEvent evt)
	{// GEN-FIRST:event_typeJComboBoxActionPerformed
		if (evt.getSource() != null)
		{ // switch panel
			selectedPanel = panels.get(this.typeJComboBox.getSelectedIndex());
			for (JPanel panel : panels)
			{
				panel.setVisible(false);
			}
			selectedPanel.setVisible(true);
			switch (this.typeJComboBox.getSelectedIndex())
			{
				case 1:
					this.setType1Panel();
					break;
				case 2:
					this.setType2Panel();
					break;
				case 3:
					this.setType3Panel();
					break;
			}
			this.setGeneratingEnabled(false);
			this.removeJTextAreas();
		}
	}// GEN-LAST:event_typeJComboBoxActionPerformed

	/**
	 * operation from in panel 1 is choosen
	 * 
	 * @param evt
	 *            the operation is selected in combobox with the sign "from"
	 */
	private void type1OperationFromJComboBoxActionPerformed(java.awt.event.ActionEvent evt)
	{// GEN-FIRST:event_type1OperationFromJComboBoxActionPerformed
		if (evt.getSource() != null)
		{
			this.setGeneratingEnabled(false);
			this.removeJTextAreas();
			// index of selected item
			int i = this.type1OperationFromJComboBox.getSelectedIndex();
			// change operation To combobox
			this.type1OperationToJComboBox.removeAllItems();
			for (int j = i; j < this.type1OperationFromJComboBox.getItemCount() - 1; j++)
			{
				this.type1OperationToJComboBox.addItem(this.type1OperationFromJComboBox.getItemAt(j + 1));
			}
			this.type1OperationToJComboBox.addItem("canonical DFA");
			// disable/enable minimization
			// disable/ enable total transition function
			boolean enabled = (i == 2 ? true : false);
			this.setType1MinimizationEnabled(enabled);
			this.setType1TotalTransitionFunctionEnabled(enabled);
			// disable / enable unreachable states
			enabled = (i == 3 ? false : true);
			this.setType1UnreachableStatesEnabled(enabled);
			this.setType1FirstStateNotInitialEnabled(enabled);
			// enable / disable resulting automaton states
			switch (i)
			{
				case 0:
					this.setType1ResultingAutomatonStatesEnabled(false);
					this.setType1ResultingAutomatonTransitionsEnabled(true);
					break;
				case 3:
					this.setType1ResultingAutomatonEnabled(false);
					break;
				default:
					this.setType1ResultingAutomatonEnabled(true);
					break;
			}

		}
	}// GEN-LAST:event_type1OperationFromJComboBoxActionPerformed

	/**
	 * operation to in panel 1 is choosen
	 * 
	 * @param evt
	 *            the operation is selected in the combobox with the sign "to"
	 */
	private void type1OperationToJComboBoxActionPerformed(java.awt.event.ActionEvent evt)
	{// GEN-FIRST:event_type1OperationToJComboBoxActionPerformed
		if (evt.getSource() != null)
		{
			// index of selected item
			this.setGeneratingEnabled(false);
			this.removeJTextAreas();
			int i = this.type1OperationFromJComboBox.getItemCount() - this.type1OperationToJComboBox.getItemCount()
				+ this.type1OperationToJComboBox.getSelectedIndex();
			// enable / disable advanced minimization options
			boolean enabled = (i > 1 ? true : false);
			this.setType1MinimizationEnabled(enabled);
			int j = this.type1OperationFromJComboBox.getSelectedIndex();
			// enable / disable resulting automaton options
			switch (i)
			{
				case 0:
					this.setType1ResultingAutomatonStatesEnabled(false);
					this.setType1ResultingAutomatonTransitionsEnabled(true);
					break;
				default:
					this.setType1ResultingAutomatonEnabled(true);
					break;
			}
			enabled = (j == 2 ? true : false);
			// enable / disable total transition function
			this.setType1TotalTransitionFunctionEnabled(enabled);
			// enable / disable unreachable states options
			enabled = (j == 3 ? false : true);
			this.setType1UnreachableStatesEnabled(enabled);
		}
	}// GEN-LAST:event_type1OperationToJComboBoxActionPerformed

	/**
	 * copy all text from the output area to the clipboard
	 * 
	 * @param evt
	 *            the button with the sign "copy" is selected
	 */
	private void copyAllJButtonActionPerformed(java.awt.event.ActionEvent evt)
	{// GEN-FIRST:event_copyAllJButtonActionPerformed
		if (evt.getSource() != null)
		{
			javax.swing.JTextArea j = this.getSelectedArea();
			j.selectAll();
			j.copy();
		}
	}// GEN-LAST:event_copyAllJButtonActionPerformed

	/**
	 * save the selected text from the output area to the file
	 * 
	 * @param evt
	 *            button with the sign "save as" is selected
	 */
	private void saveJButtonActionPerformed(java.awt.event.ActionEvent evt)
	{// GEN-FIRST:event_saveJButtonActionPerformed
		if (evt != null)
		{
			javax.swing.JTextArea j = this.getSelectedArea();
			if (j.getSelectedText() == null)
			{
				javax.swing.JOptionPane.showMessageDialog(this, "Some text must be selected.", "Warning",
					JOptionPane.WARNING_MESSAGE);
			}
			else
			{
				File file = this.createFile();
				this.saveToFile(j.getSelectedText(), file);
			}
		}
	}// GEN-LAST:event_saveJButtonActionPerformed

	/**
	 * Exersises are written to the output panel
	 * 
	 * @param evt
	 *            the button with the sign "generate" is selected
	 */
	private void generateJButtonActionPerformed(java.awt.event.ActionEvent evt)
	{// GEN-FIRST:event_generateJButtonActionPerformed
		if (evt.getSource() != null)
		{
			try
			{
				java.awt.Cursor c = java.awt.Cursor.getPredefinedCursor(3);
				this.setCursor(c);
			}
			catch (IllegalArgumentException e)
			{
			}
			this.generateJButton.setEnabled(false);
			this.stopJButton.setEnabled(true);
			this.setButtonsEnabled(false);
			this.setGeneratingEnabled(true);
			this.setSelectedPanelEnabled(false);
			this.progressJLabel.setText("Generating...");
			Map<String, JTextArea> output = new HashMap<String, JTextArea>();
			output.put("latex", latexJTextArea);
			output.put("plainText", plainTextJTextArea);
			output.put("IS", isJTextArea);
			output.put("latexEN", latexENJTextArea);
			output.put("plainTextEN", plainTextENJTextArea);
			output.put("ISEN", isENJTextArea);
			this.removeJTextAreas();
			if (selectedPanel.equals(this.type0JPanel))
			{
				this.getExerciseT0(output);
			}
			if (selectedPanel.equals(this.type1JPanel))
			{
				this.getExerciseT1(output);
			}
			if (selectedPanel.equals(this.type2JPanel))
			{
				this.getExerciseT2(output);
			}
			if (selectedPanel.equals(this.type3JPanel))
			{
				this.getExerciseT3(output);
			}
		}
	}// GEN-LAST:event_generateJButtonActionPerformed

	/**
	 * cleans the text in all tabs
	 */
	private void removeJTextAreas()
	{
		this.latexENJTextArea.setText(null);
		this.latexJTextArea.setText(null);
		this.plainTextENJTextArea.setText(null);
		this.plainTextJTextArea.setText(null);
		this.isENJTextArea.setText(null);
		this.isJTextArea.setText(null);
	}

	/**
	 * save all text from the output area to the file
	 * 
	 * @param evt
	 *            the button with the sign "save all as" is selected
	 */
	private void saveAllJButtonActionPerformed(java.awt.event.ActionEvent evt)
	{// GEN-FIRST:event_saveAllJButtonActionPerformed
		if (evt != null)
		{
			javax.swing.JTextArea j = this.getSelectedArea();
			if (j.getText() == null)
			{
				javax.swing.JOptionPane.showMessageDialog(this, "Any text was not found.", "Warning",
					JOptionPane.WARNING_MESSAGE);
			}
			else
			{
				File file = this.createFile();
				this.saveToFile(j.getText(), file);
			}
		}
	}// GEN-LAST:event_saveAllJButtonActionPerformed

	/**
	 * copy selected text from the output area to the clipboard
	 * 
	 * @param evt
	 *            the button with the sign "copy" is selected
	 */
	private void copyJButtonActionPerformed(java.awt.event.ActionEvent evt)
	{// GEN-FIRST:event_copyJButtonActionPerformed
		if (evt.getSource() != null)
		{
			javax.swing.JTextArea j = this.getSelectedArea();
			if (j.getSelectedText() == null)
			{
				javax.swing.JOptionPane.showMessageDialog(this, "Some text must be selected.", "Warning",
					JOptionPane.WARNING_MESSAGE);
			}
			else
			{
				j.copy();
			}
		}
	}// GEN-LAST:event_copyJButtonActionPerformed

	/**
	 * enables resizing the form
	 * 
	 * @param evt
	 *            the form was resized
	 */
	private void formComponentResized(java.awt.event.ComponentEvent evt)
	{// GEN-FIRST:event_formComponentResized
		if (evt.getSource() != null)
		{
			if ((this.getHeight() >= this.getMinimumSize().height + 20)
				|| (this.getWidth() < MAX_WIDTH && this.getWidth() >= MIN_WIDTH))
			{
				this.outputJTabbedPane.setSize(this.getWidth() - this.selectedPanel.getWidth() - 75, this.getHeight()
					- 75 - this.copyJButton.getHeight());
				this.copyAllJButton.setLocation(this.copyAllJButton.getX(),
					this.getHeight() - 50 - this.copyAllJButton.getHeight());
				this.saveJButton.setLocation(this.saveJButton.getX(),
					(this.getHeight() - 50 - this.saveJButton.getHeight()));
				this.saveAllJButton.setLocation(this.saveAllJButton.getX(),
					getHeight() - 50 - this.saveAllJButton.getHeight());
				this.copyJButton.setLocation(this.copyJButton.getX(), getHeight() - 50 - this.copyJButton.getHeight());
			}
			else
			{
				this.resizeFrame();
			}
		}

	}// GEN-LAST:event_formComponentResized

	/**
	 * the button with the sign "stop" was pressed
	 * 
	 * @param evt
	 *            the button with the sign "stop" was pressed
	 */
	private void stopJButtonActionPerformed(java.awt.event.ActionEvent evt)
	{// GEN-FIRST:event_stopJButtonActionPerformed
		if (evt.getSource() != null)
		{
			if (t0 != null)
			{
				t0.cancel(true);
				t0 = null;
			}
			if (t1 != null)
			{
				t1.cancel(true);
				t1 = null;
			}
			if (t2 != null)
			{
				t2.cancel(true);
				t2 = null;
			}
			if (t3 != null)
			{
				t3.cancel(true);
				t3 = null;
			}

			this.generateJButton.setEnabled(true);
			this.stopJButton.setEnabled(false);
			this.setButtonsEnabled(true);
			this.setCursor(java.awt.Cursor.getDefaultCursor());
			this.progressJLabel.setText("Generating stopped");
			this.setSelectedPanelEnabled(true);
		}
	}// GEN-LAST:event_stopJButtonActionPerformed

	/**
	 * the item in combo box operation of type 2 was selected
	 * 
	 * @param evt
	 *            the item in combo box operation of type 2 was selected
	 */
	private void type2OperationJComboBoxActionPerformed(java.awt.event.ActionEvent evt)
	{// GEN-FIRST:event_type2OperationJComboBoxActionPerformed
		if (evt.getSource() != null)
		{
			this.setGeneratingEnabled(false);
			this.removeJTextAreas();
			this.setType2Panel();
		}
	}// GEN-LAST:event_type2OperationJComboBoxActionPerformed

	/**
	 * the item in combo box operation of type 3 was selected
	 * 
	 * @param evt
	 *            the item in combo box operation of type 3 was selected
	 */
	private void type3OperationJComboBoxActionPerformed(java.awt.event.ActionEvent evt)
	{// GEN-FIRST:event_type3OperationJComboBoxActionPerformed
		if (evt.getSource() != null)
		{
			this.setGeneratingEnabled(false);
			this.removeJTextAreas();
			this.setType3Panel();
		}
	}// GEN-LAST:event_type3OperationJComboBoxActionPerformed

	private void type0OperationJComboBoxActionPerformed(java.awt.event.ActionEvent evt)
	{// GEN-FIRST:event_type0OperationJComboBoxActionPerformed
		if (evt.getSource() != null)
		{
			this.setGeneratingEnabled(false);
			this.removeJTextAreas();
		}
	}// GEN-LAST:event_type0OperationJComboBoxActionPerformed

	/**
	 * the calculation of the thread, which generated the exercises, is ready. The button with the sign GENERATE is
	 * enabled, the button with the sign STOP is not enabled
	 */
	public void resetStopGenerateButtons()
	{
		t0 = null;
		t1 = null;
		t2 = null;
		t3 = null;
		this.stopJButton.setEnabled(false);
		this.generateJButton.setEnabled(true);
		this.setButtonsEnabled(true);
		this.setCursor(java.awt.Cursor.getDefaultCursor());
		this.setGeneratingEnabled(false);
		this.setSelectedPanelEnabled(true);
	}

	/**
	 * sets the progress bar with the given maximum
	 * 
	 * @param max
	 *            value of progressbar
	 */
	private void setProggressBar(int max)
	{
		if (max <= 0)
		{
			throw new IllegalArgumentException("ExerciseBuilder.setProgressBar()");
		}
		this.jProgressBar.setMaximum(max);
		this.jProgressBar.setStringPainted(true);
	}

	/**
	 * sets the progress information in the panel Generating (text about ready exercises, progress bar...)
	 * 
	 * @param ready
	 *            number of ready exercises
	 */
	public void setProgress(int ready)
	{
		int from = this.jProgressBar.getMaximum();
		this.jProgressBar.setString((ready * 100) / from + " %");
		this.jProgressBar.setValue(ready);
		this.completedExercisesJLabel.setText(ready + " of " + from);
		if (ready == from)
		{
			this.progressJLabel.setText("Generating completed");
			this.resetStopGenerateButtons();
			this.setGeneratingEnabled(true);
		}
	}

	/**
	 * resises the frame, when the selected panel is changed
	 */
	private void resizeFrame()
	{
		selectedPanel.setLocation(0, 0);
		typeJLayeredPane.setSize(selectedPanel.getWidth(), selectedPanel.getHeight());
		generatingJPanel.setLocation(generatingJPanel.getX(), typeJLayeredPane.getY() + typeJLayeredPane.getHeight()); // +15
		if ((this.outputJTabbedPane.getWidth() + this.selectedPanel.getWidth()) + 75 <= MAX_WIDTH)
		{
			this.outputJTabbedPane.setSize(MAX_WIDTH - this.selectedPanel.getWidth() - 75, this.generatingJPanel.getY()
				+ (this.generatingJPanel.getHeight() / 2));
		}
		else
		{
			this.outputJTabbedPane.setSize(MIN_WIDTH - this.selectedPanel.getWidth() - 75, this.generatingJPanel.getY()
				+ (this.generatingJPanel.getHeight() / 2));
		}
		this.copyAllJButton.setLocation(this.copyAllJButton.getX(), (this.generatingJPanel.getY()
			+ (this.generatingJPanel.getHeight()) - this.copyAllJButton.getHeight()));
		this.saveJButton.setLocation(this.saveJButton.getX(),
			(this.generatingJPanel.getY() + (this.generatingJPanel.getHeight()) - this.saveJButton.getHeight()));
		this.saveAllJButton.setLocation(this.saveAllJButton.getX(), (this.generatingJPanel.getY()
			+ (this.generatingJPanel.getHeight()) - this.saveAllJButton.getHeight()));
		this.copyJButton.setLocation(this.copyJButton.getX(),
			(this.generatingJPanel.getY() + (this.generatingJPanel.getHeight()) - this.copyJButton.getHeight()));
		// vyska listy !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
		int frameWidth;
		if ((this.outputJTabbedPane.getWidth() + this.selectedPanel.getWidth() + 75) > MIN_WIDTH)
		{
			frameWidth = MAX_WIDTH;
		}
		else
		{
			frameWidth = MIN_WIDTH;
		}
		this.setSize(frameWidth, generatingJPanel.getY() + generatingJPanel.getHeight() + 60);

	}

	/**
	 * Enables or disables this component, depending on the value of the parameter b. An enabled component can respond
	 * to user input Components are disabled initially by default.
	 * 
	 * @param enabled
	 *            If true, this component is enabled; otherwise this component is disabled
	 */
	private void setType1MinimizationEnabled(boolean enabled)
	{
		// if number of steps min, max were filled before(and false is given),
		// the numbers are removed
		if (enabled == false)
		{
			this.type1MinimizationStepsMinJTextField.setText(null);
			this.type1MinimizationStepsMaxJTextField.setText(null);
		}
		for (java.awt.Component c : this.type1MinimizationJPanel.getComponents())
		{
			c.setEnabled(enabled);
		}
	}

	/**
	 * Enables or disables this component, depending on the value of the parameter b. An enabled component can respond
	 * to user input Components are enabled initially by default.
	 * 
	 * @param enabled
	 *            If true, this component is enabled; otherwise this component is disabled
	 */
	private void setType1UnreachableStatesEnabled(boolean enabled)
	{
		if (enabled == false)
		{
			this.type1InputAutomatonUnreachableStatesMinJTextField.setText(null);
			this.type1InputAutomatonUnreachableStatesMaxJTextField.setText(null);
		}
		this.type1InputAutomatonUnreachableStates1JLabel.setEnabled(enabled);
		this.type1InputAutomatonUnreachableStates2jLabel.setEnabled(enabled);
		this.type1InputAutomatonUnreachableStatesMinJLabel.setEnabled(enabled);
		this.type1InputAutomatonUnreachableStatesMaxJLabel.setEnabled(enabled);
		this.type1InputAutomatonUnreachableStatesMinJTextField.setEnabled(enabled);
		this.type1InputAutomatonUnreachableStatesMaxJTextField.setEnabled(enabled);
	}

	/**
	 * Enables or disables this component, depending on the value of the parameter b. An enabled component can respond
	 * to user input Components are disabled initially by default.
	 * 
	 * @param enabled
	 *            If true, this component is enabled; otherwise this component is disabled
	 */
	private void setType1TotalTransitionFunctionEnabled(boolean enabled)
	{
		if (enabled == false)
		{
			this.type1InputAutomatonTotalTransitionFunctionJCheckBox.setSelected(enabled);
		}
		this.type1InputAutomatonTotalTransitionFunctionJCheckBox.setEnabled(enabled);
	}

	/**
	 * Enables or disables this component, depending on the value of the parameter b. An enabled component can respond
	 * to user input Components are disabled initially by default.
	 * 
	 * @param enabled
	 *            If true, this component is enabled; otherwise this component is disabled
	 */
	private void setType1FirstStateNotInitialEnabled(boolean enabled)
	{
		if (enabled == false)
		{
			this.type1InputAutomatonFirstStateJCheckBox.setSelected(enabled);
		}
		this.type1InputAutomatonFirstStateJCheckBox.setEnabled(enabled);
	}

	/**
	 * Enables or disables this component, depending on the value of the parameter b. An enabled component can respond
	 * to user input Components are disabled initially by default.
	 * 
	 * @param enabled
	 *            If true, this component is enabled; otherwise this component is disabled
	 */
	private void setType1ResultingAutomatonEnabled(boolean enabled)
	{
		if (enabled == false)
		{
			this.type1OutputAutomatonStatesMinJTextField.setText(null);
			this.type1OutputAutomatonStatesMaxJTextField.setText(null);
			this.type1OutputAutomatonTransitionsMinJTextField.setText(null);
			this.type1OutputAutomatonTransitionsMaxJTextField.setText(null);
		}
		for (java.awt.Component c : this.type1OutputAutomatonJPanel.getComponents())
		{
			c.setEnabled(enabled);
		}
	}

	/**
	 * Enables or disables this component, depending on the value of the parameter b. An enabled component can respond
	 * to user input Components are disabled initially by default.
	 * 
	 * @param enabled
	 *            If true, this component is enabled; otherwise this component is disabled
	 */
	private void setType1ResultingAutomatonStatesEnabled(boolean enabled)
	{
		if (enabled == false)
		{
			this.type1OutputAutomatonStatesMinJTextField.setText(null);
			this.type1OutputAutomatonStatesMaxJTextField.setText(null);
		}
		this.type1OutputAutomatonStatesJLabel.setEnabled(enabled);
		this.type1OutputAutomatonStatesMinJLabel.setEnabled(enabled);
		this.type1OutputAutomatonStatesMaxJLabel.setEnabled(enabled);
		this.type1OutputAutomatonStatesMinJTextField.setEnabled(enabled);
		this.type1OutputAutomatonStatesMaxJTextField.setEnabled(enabled);
	}

	/**
	 * Enables or disables this component, depending on the value of the parameter b. An enabled component can respond
	 * to user input Components are enabled initially by default.
	 * 
	 * @param enabled
	 *            If true, this component is enabled; otherwise this component is disabled
	 */
	private void setType1ResultingAutomatonTransitionsEnabled(boolean enabled)
	{
		if (enabled == false)
		{
			this.type1OutputAutomatonTransitionsMinJTextField.setText(null);
			this.type1OutputAutomatonTransitionsMaxJTextField.setText(null);
		}
		this.type1OutputAutomatonTransitionsJLabel.setEnabled(enabled);
		this.type1OutputAutomatonTransitionsMinJLabel.setEnabled(enabled);
		this.type1OutputAutomatonTransitionsMaxJLabel.setEnabled(enabled);
		this.type1OutputAutomatonTransitionsMinJTextField.setEnabled(enabled);
		this.type1OutputAutomatonTransitionsMaxJTextField.setEnabled(enabled);
	}

	/**
	 * Enables or disables this component, depending on the value of the parameter b. An enabled component can respond
	 * to user input Components are disabled initially by default.
	 * 
	 * @param enabled
	 *            If true, this component is enabled; otherwise this component is disabled
	 */
	private void setButtonsEnabled(boolean enabled)
	{
		this.copyAllJButton.setEnabled(enabled);
		this.saveAllJButton.setEnabled(enabled);
		this.copyJButton.setEnabled(enabled);
		this.saveJButton.setEnabled(enabled);
	}

	/**
	 * sets the generating details enabled
	 * 
	 * @param enabled
	 *            If true, details are enabled; otherwise details are disabled
	 */
	private void setGeneratingEnabled(boolean enabled)
	{
		this.jProgressBar.setVisible(enabled);
		this.progressJLabel.setVisible(enabled);
		this.completedExercisesJLabel.setVisible(enabled);
	}

	/**
	 * sets the panel for exercises of type 1
	 */
	private void setType1Panel()
	{
		// advance minimization options is disabled
		this.setType1MinimizationEnabled(false);
		// states of resulting automaton is disabled
		this.setType1ResultingAutomatonStatesEnabled(false);
		// total transition function is disabled
		this.setType1TotalTransitionFunctionEnabled(false);
	}

	/**
	 * sets the panel for exercises of type 2
	 */
	private void setType2Panel()
	{
		int i = type2OperationJComboBox.getSelectedIndex();
		if (i == 0)
		{
			this.type2InputAutomatonJPanel.setVisible(true);
			this.type2InputGrammarJPanel.setVisible(false);
			this.type2OutputAutomatonJPanel.setVisible(false);
			this.type2OutputGrammarJPanel.setVisible(true);
		}
		if (i == 1)
		{
			this.type2InputAutomatonJPanel.setVisible(false);
			this.type2InputGrammarJPanel.setVisible(true);
			this.type2OutputAutomatonJPanel.setVisible(true);
			this.type2OutputGrammarJPanel.setVisible(false);
		}
	}

	/**
	 * sets the panel for exercises of type 2
	 */
	private void setType3Panel()
	{
		int i = type3OperationJComboBox.getSelectedIndex();
		if (i == 0)
		{
			this.type3InputAutomatonJPanel.setVisible(true);
			this.type3OutputREJPanel.setVisible(true);
			this.type3InputREJPanel.setVisible(false);
			this.type3OutputAutomatonJPanel.setVisible(false);
		}
		if (i == 1)
		{
			this.type3InputAutomatonJPanel.setVisible(false);
			this.type3OutputREJPanel.setVisible(false);
			this.type3InputREJPanel.setVisible(true);
			this.type3OutputAutomatonJPanel.setVisible(true);
		}
	}

	/**
	 * saves the string to the given file
	 * 
	 * @param s
	 *            string to save
	 * @param f
	 *            file
	 */
	private void saveToFile(String s, File file)
	{
		if (file == null)
		{
			return;
		}
		if (s.isEmpty())
		{
			return;
		}
		OutputStreamWriter fos = null;
		try
		{
			FileOutputStream fw = new FileOutputStream(file);
			fos = new OutputStreamWriter(fw, "UTF-8");
			fos.write(s);
		}
		catch (IOException e)
		{
			this.showErrorDialog("file " + file.getName() + ": " + e.getMessage());
			return;
		}
		finally
		{
			try
			{
				fos.close();
			}
			catch (IOException e)
			{
				this.showErrorDialog("The closing of the file outputstream failed");
				return;
			}
		}
	}

	/**
	 * returns new file or null, if error occures
	 * 
	 * @return new file or null, if error occures
	 */
	private File createFile()
	{
		File file = null;
		JFileChooser chooser = new JFileChooser();
		FileNameExtensionFilter filter = new FileNameExtensionFilter("tex & txt & qdef", "tex", "txt", "qdef");
		chooser.setFileFilter(filter);
		int returnVal = chooser.showSaveDialog(this);
		if (returnVal == JFileChooser.APPROVE_OPTION)
		{
			file = new File(chooser.getSelectedFile().getAbsolutePath());
			int n = 0;
			if (file.exists())
			{
				n = JOptionPane.showConfirmDialog(this, "File " + file.getName()
					+ " already exists.\nDo you want to overwrite it?", "Warning", JOptionPane.YES_NO_OPTION);
			}
			if (n != 0)
			{
				return null;
			}
			try
			{
				file.createNewFile();
			}
			catch (IOException ex)
			{
				this.showErrorDialog("The file " + file.getName() + " was not created. An I/O error occurred:\n "
					+ ex.getMessage());
				return null;
			}
		}
		return file;
	}

	/**
	 * parses the input and make the working thread, which computes the result and prints it into given output
	 * 
	 * @param output
	 *            map; keyset are strings: plainText, plainTextEN, IS, ISEN, latex, latexEN; values the JTextAreas,
	 *            where the result is printed
	 */
	private void getExerciseT0(Map<String, JTextArea> output)
	{
		int numberOfExercises = 0;
		try
		{
			numberOfExercises = Integer.parseInt(this.exercisesJTextField.getText());
		}
		catch (NumberFormatException ex)
		{
			this.showWarningDialog("The generating panel:\n the field "
				+ "number of exercises has to be filled with number > 0.");
			return;
		}
		if (numberOfExercises <= 0)
		{
			this.showWarningDialog("The generating panel:\n the field "
				+ "number of exercises has to be filled with number > 0.");
			return;
		}
		if (numberOfExercises > 500)
		{
			this.showWarningDialog("The generating panel:\n the field "
				+ "number of exercises has to be filled with number <= 500.");
			return;
		}
		this.setProggressBar(numberOfExercises);
		this.setProgress(0);

		int operation = this.type0OperationJComboBox.getSelectedIndex();
		int alphabet = this.type0AlphabetJComboBox.getSelectedIndex();
		int sizeOfAlphabetMin = 0;
		int sizeOfAlphabetMax = 0;
		// attributes of the first automaton
		int a1NumberOfStatesMin = 0;
		int a1NumberOfStatesMax = 0;
		int a1NumberOfFinalStatesMin = 0;
		int a1NumberOfFinalStatesMax = 0;
		int a1NumberOfTransitionsMin = 0;
		int a1NumberOfTransitionsMax = 0;
		boolean a1TotalTransitionFunction = this.type0Automaton1TotalTransitionFunctionJCheckBox.isSelected();
		boolean a1Complement = this.type0Automaton1CoJRadioButton.isSelected();
		int a1States = this.type0Automaton1StatesJComboBox.getSelectedIndex();
		// attributes of the second automaton
		int a2NumberOfStatesMin = 0;
		int a2NumberOfStatesMax = 0;
		int a2NumberOfFinalStatesMin = 0;
		int a2NumberOfFinalStatesMax = 0;
		int a2NumberOfTransitionsMin = 0;
		int a2NumberOfTransitionsMax = 0;
		boolean a2TotalTransitionFunction = this.type0Automaton2TotalTransitionFunctionJCheckBox.isSelected();
		boolean a2Complement = this.type0Automaton2CoJRadioButton.isSelected();
		int a2States = this.type0Automaton2StatesJComboBox.getSelectedIndex();
		// result, the optional parameters are -1, if tey are not set
		int outputStatesMin = -1;
		int outputStatesMax = -1;
		int outputTransitionsMin = -1;
		int outputTransitionsMax = -1;
		boolean outputMinOneFinalState = this.type0OutputAutomatonMinOneFinalStateJCheckBox.isSelected();
		try
		{
			a1NumberOfStatesMin = Integer.parseInt(this.type0Automaton1StatesMinJTextField.getText());
			a1NumberOfStatesMax = Integer.parseInt(this.type0Automaton1StatesMaxJTextField.getText());
			a1NumberOfFinalStatesMin = Integer.parseInt(this.type0Automaton1FinalStatesMinJTextField.getText());
			a1NumberOfFinalStatesMax = Integer.parseInt(this.type0Automaton1FinalStatesMaxJTextField.getText());
			a1NumberOfTransitionsMin = Integer.parseInt(this.type0Automaton1TransitionsMinJTextField.getText());
			a1NumberOfTransitionsMax = Integer.parseInt(this.type0Automaton1TransitionsMaxJTextField.getText());
			sizeOfAlphabetMin = Integer.parseInt(this.type0Automaton1AlphabetMinJTextField.getText());
			sizeOfAlphabetMax = Integer.parseInt(this.type0Automaton1AlphabetMaxJTextField.getText());
			a2NumberOfStatesMin = Integer.parseInt(this.type0Automaton2StatesMinJTextField.getText());
			a2NumberOfStatesMax = Integer.parseInt(this.type0Automaton2StatesMaxJTextField.getText());
			a2NumberOfFinalStatesMin = Integer.parseInt(this.type0Automaton2FinalStatesMinJTextField.getText());
			a2NumberOfFinalStatesMax = Integer.parseInt(this.type0Automaton2FinalStatesMaxJTextField.getText());
			a2NumberOfTransitionsMin = Integer.parseInt(this.type0Automaton2TransitionsMinJTextField.getText());
			a2NumberOfTransitionsMax = Integer.parseInt(this.type0Automaton2TransitionsMaxJTextField.getText());
			if (!(this.type0OutputAutomatonStatesMinJTextField.getText().isEmpty())
				&& !(this.type0OutputAutomatonStatesMaxJTextField.getText().isEmpty()))
			{
				outputStatesMin = Integer.parseInt(this.type0OutputAutomatonStatesMinJTextField.getText());
				outputStatesMax = Integer.parseInt(this.type0OutputAutomatonStatesMaxJTextField.getText());
				if (outputStatesMin < 1)
				{
					this.showWarningDialog("The output automaton panel:\n" + "number of states min < 1.");
					return;
				}
			}
			if (!(this.type0OutputAutomatonTransitionsMinJTextField.getText().isEmpty())
				&& !(this.type0OutputAutomatonTransitionsMaxJTextField.getText().isEmpty()))
			{
				outputTransitionsMin = Integer.parseInt(this.type0OutputAutomatonTransitionsMinJTextField.getText());
				outputTransitionsMax = Integer.parseInt(this.type0OutputAutomatonTransitionsMaxJTextField.getText());
				if (outputTransitionsMin < 0)
				{
					this.showWarningDialog("The output automaton panel:\n" + "number of transitions min < 0.");
					return;
				}
			}
		}
		catch (NumberFormatException ex)
		{
			this.showWarningDialog("The fields have to be filled with number >= 0.");
			return;
		}
		// check the input for the automaton 1
		if (a1NumberOfStatesMin < 1 || a1NumberOfStatesMax < 1)
		{
			this.showWarningDialog("The pane automaton A panel:\n" + "Number of states min, max must be >= 1.");
			return;
		}
		if ((a1NumberOfFinalStatesMin < 0) || (a1NumberOfFinalStatesMax < 0) || (a1NumberOfTransitionsMin < 0)
			|| (a1NumberOfTransitionsMax < 0) || (sizeOfAlphabetMin < 0) || (sizeOfAlphabetMax < 0))
		{
			this.showWarningDialog("The pane automaton A panel:\n" + "The fields \nhave to be filled with number >= 0.");
			return;
		}
		if (a1NumberOfStatesMin > a1NumberOfStatesMax)
		{
			this.showWarningDialog("The automaton A panel:\n" + "number of states min > number of states max.");
			return;
		}
		if (a1NumberOfFinalStatesMin > a1NumberOfFinalStatesMax)
		{
			this.showWarningDialog("The automaton A panel:\n"
				+ "number of final states min > number of final states max.");
			return;
		}
		if (a1NumberOfTransitionsMin > a1NumberOfTransitionsMax)
		{
			this.showWarningDialog("The automaton A panel:\n"
				+ "number of transitions min > number of transitions max.");
			return;
		}
		if (sizeOfAlphabetMin > sizeOfAlphabetMax)
		{
			this.showWarningDialog("Automaton A panel:\n" + "size of alphabet min > size of alphabet max.");
			return;
		}
		if (a1NumberOfFinalStatesMin > a1NumberOfStatesMax)
		{
			this.showWarningDialog("The automaton A panel:\n" + "number of final states min > number of states max.");
			return;
		}
		if (sizeOfAlphabetMin > a1NumberOfTransitionsMax)
		{
			this.showWarningDialog("The automaton A panel:\n" + "size of alphabet min > number of transitions max.");
			return;
		}
		if (a1NumberOfTransitionsMin > a1NumberOfStatesMax * a1NumberOfStatesMax * sizeOfAlphabetMax)
		{
			this.showWarningDialog("The automaton A panel:\n" + "number of transitions min > "
				+ "((number of states max)^2 * (size of alphabet max)).");
			return;
		}
		if (a1TotalTransitionFunction && (a1NumberOfStatesMin * sizeOfAlphabetMin > a1NumberOfTransitionsMax))
		{
			this.showWarningDialog("The automaton A panel:\n" + "total transition function && "
				+ "(number of states min * size of alphabet max) < " + "number of transitions max).");
			return;
		}
		// check the input for automaton 2
		if (a2NumberOfStatesMin < 1 || a2NumberOfStatesMax < 1)
		{
			this.showWarningDialog("The pane automaton B panel:\n" + "Number of states min, max must be >= 1.");
			return;
		}
		if ((a2NumberOfFinalStatesMin < 0) || (a2NumberOfFinalStatesMax < 0) || (a2NumberOfTransitionsMin < 0)
			|| (a2NumberOfTransitionsMax < 0))
		{
			this.showWarningDialog("The pane automaton B panel:\n" + "The fields \nhave to be filled with number >= 0.");
			return;
		}
		if (a2NumberOfStatesMin > a2NumberOfStatesMax)
		{
			this.showWarningDialog("The automaton B panel:\n" + "number of states min > number of states max.");
			return;
		}
		if (a2NumberOfFinalStatesMin > a2NumberOfFinalStatesMax)
		{
			this.showWarningDialog("The automaton B panel:\n"
				+ "number of final states min > number of final states max.");
			return;
		}
		if (a2NumberOfTransitionsMin > a2NumberOfTransitionsMax)
		{
			this.showWarningDialog("The automaton B panel:\n"
				+ "number of transitions min > number of transitions max.");
			return;
		}
		if (sizeOfAlphabetMin > a2NumberOfTransitionsMax)
		{
			this.showWarningDialog("The automaton B panel:\n" + "size of alphabet min > number of transitions max.");
			return;
		}
		if (a2NumberOfTransitionsMin > a2NumberOfStatesMax * a2NumberOfStatesMax * sizeOfAlphabetMax)
		{
			this.showWarningDialog("The automaton B panel:\n" + "number of transitions min > "
				+ "((number of states max)^2 * (size of alphabet max)).");
			return;
		}
		if (a2TotalTransitionFunction && (a2NumberOfStatesMin * sizeOfAlphabetMin > a2NumberOfTransitionsMax))
		{
			this.showWarningDialog("The automaton B panel:\n" + "total transition function && "
				+ "(number of states min * size of alphabet max) < " + "number of transitions max).");
			return;
		}
		// check output attributes
		if (outputStatesMin > outputStatesMax)
		{
			this.showWarningDialog("The output automaton panel:\n" + "number of states min > number of states max.");
			return;
		}
		if (outputTransitionsMin > outputTransitionsMax)
		{
			this.showWarningDialog("The output automaton panel:\n"
				+ "number of transitions min > number of transitions max.");
			return;
		}
		if (outputStatesMin > (a1NumberOfStatesMin + (a1TotalTransitionFunction ? 0 : 1))
			* (a2NumberOfStatesMin + (a2TotalTransitionFunction ? 0 : 1)))
		{
			this.showWarningDialog("The output automaton panel:\n" + "output states min > (a1NumberOfStatesMin + "
				+ "(a1TotalTransitionFunction?0:1)) * (a2NumberOfStatesMin + " + "(a2TotalTransitionFunction?0:1))");
			return;
		}
		if (outputTransitionsMax > 0)
		{
			if (outputTransitionsMax < (a1NumberOfStatesMin + (a1TotalTransitionFunction ? 0 : 1))
				* (a2NumberOfStatesMin + (a2TotalTransitionFunction ? 0 : 1)) * sizeOfAlphabetMin)
			{
				this.showWarningDialog("The output automaton panel:\n" + "output states max < (a1NumberOfStatesMin + "
					+ "(a1TotalTransitionFunction?0:1)) * " + "(a2NumberOfStatesMin + "
					+ "(a2TotalTransitionFunction?0:1) * sizeOfAlphabetMin)");
				return;
			}
		}
		(t0 = new T0Generator(this, output, numberOfExercises, operation, alphabet, sizeOfAlphabetMin,
			sizeOfAlphabetMax, a1NumberOfStatesMin, a1NumberOfStatesMax, a1NumberOfFinalStatesMin,
			a1NumberOfFinalStatesMax, a1NumberOfTransitionsMin, a1NumberOfTransitionsMax, a1States,
			a1TotalTransitionFunction, a1Complement, a2NumberOfStatesMin, a2NumberOfStatesMax,
			a2NumberOfFinalStatesMin, a2NumberOfFinalStatesMax, a2NumberOfTransitionsMin, a2NumberOfTransitionsMax,
			a2States, a2TotalTransitionFunction, a2Complement, outputStatesMin, outputStatesMax, outputTransitionsMin,
			outputTransitionsMax, outputMinOneFinalState)).execute();
	}

	/**
	 * parses the input and make the working thread, which computes the result and prints it into given output
	 * 
	 * @param output
	 *            map; keyset are strings: plainText, plainTextEN, IS, ISEN, latex, latexEN; values the JTextAreas,
	 *            where the result is printed
	 */
	private void getExerciseT1(Map<String, JTextArea> output)
	{
		int numberOfExercises = 0;
		try
		{
			numberOfExercises = Integer.parseInt(this.exercisesJTextField.getText());
		}
		catch (NumberFormatException ex)
		{
			this.showWarningDialog("The generating panel:\n the field "
				+ "number of exercises has to be filled with number > 0.");
			return;
		}
		if (numberOfExercises <= 0)
		{
			this.showWarningDialog("The generating panel:\n the field "
				+ "number of exercises has to be filled with number > 0.");
			return;
		}
		if (numberOfExercises > 500)
		{
			this.showWarningDialog("The generating panel:\n the field "
				+ "number of exercises has to be filled with number <= 500.");
			return;
		}
		this.setProggressBar(numberOfExercises);
		this.setProgress(0);

		int operationFrom = this.type1OperationFromJComboBox.getSelectedIndex();
		int operationTo = this.type1OperationFromJComboBox.getItemCount()
			- this.type1OperationToJComboBox.getItemCount() + this.type1OperationToJComboBox.getSelectedIndex();
		int alphabet = this.type1InputAutomatonAlphabetJComboBox.getSelectedIndex();
		int states = this.type1InputAutomatonStatesJComboBox.getSelectedIndex();
		boolean firstStateNotInitial = this.type1InputAutomatonFirstStateJCheckBox.isSelected();
		boolean totalTransitionFunction = this.type1InputAutomatonTotalTransitionFunctionJCheckBox.isSelected();
		boolean stepsWriteOut = this.type1MinimizationStepsJCheckBox.isSelected();
		int numberOfStatesMin = 0;
		int numberOfStatesMax = 0;
		int numberOfFinalStatesMin = 0;
		int numberOfFinalStatesMax = 0;
		int numberOfTransitionsMin = 0;
		int numberOfTransitionsMax = 0;
		int sizeOfAlphabetMin = 0;
		int sizeOfAlphabetMax = 0;
		// optional parameters
		int numberOfStepsMin = -1; // is -1, if is not set
		int numberOfStepsMax = -1; // is -1, if is not set
		int numberOfUnreachableStatesMin = 0;
		int numberOfUnreachableStatesMax = 0;
		int resultNumberOfStatesMin = -1; // is -1, if is not set
		int resultNumberOfStatesMax = -1; // is -1, if is not set
		int resultNumberOfTransitionsMin = -1; // is -1, if is not set
		int resultNumberOfTransitionsMax = -1; // is -1, if is not set
		try
		{
			numberOfStatesMin = Integer.parseInt(this.type1InputAutomatonStatesMinJTextField.getText());
			numberOfStatesMax = Integer.parseInt(this.type1InputAutomatonStatesMaxJTextField.getText());
			numberOfFinalStatesMin = Integer.parseInt(this.type1InputAutomatonFinalStatesMinJTextField.getText());
			numberOfFinalStatesMax = Integer.parseInt(this.type1InputAutomatonFinalStatesMaxJTextField.getText());
			numberOfTransitionsMin = Integer.parseInt(this.type1InputAutomatonTransitionsMinJTextField.getText());
			numberOfTransitionsMax = Integer.parseInt(this.type1InputAutomatonTransitionsMaxJTextField.getText());
			sizeOfAlphabetMin = Integer.parseInt(this.type1InputAutomatonAlphabetMinJTextField.getText());
			sizeOfAlphabetMax = Integer.parseInt(this.type1InputAutomatonAlphabetMaxJTextField.getText());

			if (!this.type1InputAutomatonUnreachableStatesMinJTextField.getText().isEmpty()
				&& !(this.type1InputAutomatonUnreachableStatesMaxJTextField.getText().isEmpty()))
			{
				numberOfUnreachableStatesMin = Integer.parseInt(this.type1InputAutomatonUnreachableStatesMinJTextField
					.getText());
				numberOfUnreachableStatesMax = Integer.parseInt(this.type1InputAutomatonUnreachableStatesMaxJTextField
					.getText());
				if ((numberOfUnreachableStatesMin < 0) || (numberOfUnreachableStatesMax < 0))
				{
					this.showWarningDialog("The input automaton panel:\n"
						+ "The fields number of unreachable states min, "
						+ "max \n do not have to be filled or have to be filled " + "with number >= 0.");
					return;
				}
			}
			else
			{
				numberOfUnreachableStatesMax = numberOfStatesMax - 1;
			}
			if (!(this.type1MinimizationStepsMinJTextField.getText().isEmpty())
				|| !(this.type1MinimizationStepsMaxJTextField.getText().isEmpty()))
			{
				numberOfStepsMin = Integer.parseInt(this.type1MinimizationStepsMinJTextField.getText());
				numberOfStepsMax = Integer.parseInt(this.type1MinimizationStepsMaxJTextField.getText());
				if (numberOfStepsMin <= 0 || numberOfStepsMax <= 0)
				{
					this.showWarningDialog("The minimization panel:\n"
						+ "The fields (number of steps min, max) do not " + "have to be filled\n"
						+ "or must be filled with number > 0.");
					return;
				}
			}
			if (!(this.type1OutputAutomatonStatesMinJTextField.getText().isEmpty())
				&& !(this.type1OutputAutomatonStatesMaxJTextField.getText().isEmpty()))
			{
				resultNumberOfStatesMin = Integer.parseInt(this.type1OutputAutomatonStatesMinJTextField.getText());
				resultNumberOfStatesMax = Integer.parseInt(this.type1OutputAutomatonStatesMaxJTextField.getText());
				if (resultNumberOfStatesMin < 1)
				{
					this.showWarningDialog("The output automaton panel:\n" + "number of states min < 1.");
					return;
				}
			}
			if (!(this.type1OutputAutomatonTransitionsMinJTextField.getText().isEmpty())
				&& !(this.type1OutputAutomatonTransitionsMaxJTextField.getText().isEmpty()))
			{
				resultNumberOfTransitionsMin = Integer.parseInt(this.type1OutputAutomatonTransitionsMinJTextField
					.getText());
				resultNumberOfTransitionsMax = Integer.parseInt(this.type1OutputAutomatonTransitionsMaxJTextField
					.getText());
				if (resultNumberOfTransitionsMin < 0)
				{
					this.showWarningDialog("The output automaton panel:\n" + "number of transitions min < 0.");
					return;
				}
			}
		}
		catch (NumberFormatException ex)
		{
			this.showWarningDialog("The fields have to be filled with number >= 0.");
			return;
		}
		// check the input
		// attributes of the input automatom panel
		if ((numberOfStatesMin < 1) || (numberOfStatesMax < 1))
		{
			this.showWarningDialog("The input automaton panel:\n"
				+ "the number of states min, max must be filled with number > 1.");
			return;
		}
		if ((numberOfFinalStatesMin < 0) || (numberOfFinalStatesMax < 0) || (numberOfTransitionsMin < 0)
			|| (numberOfTransitionsMax < 0) || (sizeOfAlphabetMin < 0) || (sizeOfAlphabetMax < 0))
		{
			this.showWarningDialog("The input automaton panel:\n" + "The fields have to be filled with number >= 0.\n"
				+ "The fields unreachable states min, max do not have\n"
				+ "to be filled or must be filled with number >= 0.");
			return;
		}
		if (totalTransitionFunction && (numberOfStatesMin * sizeOfAlphabetMin > numberOfTransitionsMax))
		{
			this.showWarningDialog("The input automaton panel:\n" + "total transition function && "
				+ "(number of states min * size of alphabet max > " + "number of transitions max).");
			return;
		}
		if (numberOfStatesMin > numberOfStatesMax)
		{
			this.showWarningDialog("The input automaton panel:\n" + "number of states min > number of states max.");
			return;
		}
		if (numberOfFinalStatesMin > numberOfFinalStatesMax)
		{
			this.showWarningDialog("The input automaton panel:\n"
				+ "number of final states min > number of final states max.");
			return;
		}
		if (numberOfTransitionsMin > numberOfTransitionsMax)
		{
			this.showWarningDialog("The input automaton panel:\n"
				+ "number of transitions min > number of transitions max.");
			return;
		}
		if (sizeOfAlphabetMin > sizeOfAlphabetMax)
		{
			this.showWarningDialog("The input automaton panel:\n" + "size of alphabet min > size of alphabet max.");
			return;
		}
		if (numberOfUnreachableStatesMin > numberOfUnreachableStatesMax)
		{
			this.showWarningDialog("The input automaton panel:\n" + "nnumber of unreachable states min > "
				+ "number of unreachable states max.");
			return;
		}
		if (numberOfFinalStatesMin > numberOfStatesMax)
		{
			this.showWarningDialog("The input automaton panel:\n"
				+ "number of final states min > number of states max.");
			return;
		}
		if (sizeOfAlphabetMin > numberOfTransitionsMax)
		{
			this.showWarningDialog("The input automaton panel:\n" + "size of alphabet min > number of transitions max.");
			return;
		}
		if (operationFrom == 0)
		{
			if (numberOfTransitionsMin > numberOfStatesMax * numberOfStatesMax * (sizeOfAlphabetMax + 1))
			{
				this.showWarningDialog("The input automaton panel:\n" + "number of transitions min > "
					+ "(number of states max)^2 * (size of alphabet max + 1).");
				return;
			}
		}
		else
		{
			if (numberOfTransitionsMin > numberOfStatesMax * numberOfStatesMax * sizeOfAlphabetMax)
			{
				this.showWarningDialog("The input automaton panel:\n" + "number of transitions min > "
					+ "(number of states max)^2 * (size of alphabet max).");
				return;
			}
		}
		if (firstStateNotInitial && numberOfStatesMax == 1)
		{
			this.showWarningDialog("The input automaton panel:\n"
				+ "first state not initial && (number of states max = 1).");
		}
		// minimization
		if (numberOfStepsMin > numberOfStepsMax)
		{
			this.showWarningDialog("The minimization panel:\n" + "number of steps min > number of steps max.");
			return;
		}
		// output automaton
		if (resultNumberOfStatesMin > resultNumberOfStatesMax)
		{
			this.showWarningDialog("The output automaton panel:\n" + "number of states min > number of states max.");
			return;
		}
		if (resultNumberOfTransitionsMin > resultNumberOfTransitionsMax)
		{
			this.showWarningDialog("The output automaton panel:\n"
				+ "number of transitions min > number of transitions max.");
			return;
		}
		(t1 = new T1Generator(this, output, numberOfExercises, operationFrom, operationTo, numberOfStatesMin,
			numberOfStatesMax, numberOfFinalStatesMin, numberOfFinalStatesMax, numberOfTransitionsMin,
			numberOfTransitionsMax, sizeOfAlphabetMin, sizeOfAlphabetMax, alphabet, states, stepsWriteOut,
			totalTransitionFunction, firstStateNotInitial, numberOfStepsMin, numberOfStepsMax,
			numberOfUnreachableStatesMin, numberOfUnreachableStatesMax, resultNumberOfStatesMin,
			resultNumberOfStatesMax, resultNumberOfTransitionsMin, resultNumberOfTransitionsMax)).execute();
	}

	/**
	 * parses the input and make the working thread, which computes the result and prints it into given output
	 * 
	 * @param output
	 *            map; keyset are strings: plainText, plainTextEN, IS, ISEN, latex, latexEN; values the JTextAreas,
	 *            where the result is printed
	 */
	private void getExerciseT2(Map<String, JTextArea> output)
	{
		int numberOfExercises = 0;
		try
		{
			numberOfExercises = Integer.parseInt(this.exercisesJTextField.getText());
		}
		catch (NumberFormatException ex)
		{
			this.showWarningDialog("The generating panel:\n the field "
				+ "number of exercises has to be filled with number > 0.");
			return;
		}
		if (numberOfExercises <= 0)
		{
			this.showWarningDialog("The generating panel:\n the field "
				+ "number of exercises has to be filled with number > 0.");
			return;
		}
		if (numberOfExercises > 500)
		{
			this.showWarningDialog("The generating panel:\n the field "
				+ "number of exercises has to be filled with number <= 500.");
			return;
		}
		this.setProggressBar(numberOfExercises);
		this.setProgress(0);

		int operation = this.type2OperationJComboBox.getSelectedIndex();
		// NFA -> REGULAR GRAMMAR
		if (operation == 0)
		{
			int numberOfStatesMin = 0;
			int numberOfStatesMax = 0;
			int numberOfFinalStatesMin = 0;
			int numberOfFinalStatesMax = 0;
			int numberOfTransitionsMin = 0;
			int numberOfTransitionsMax = 0;
			int sizeOfAlphabetMin = 0;
			int sizeOfAlphabetMax = 0;
			// optional atributes
			int numberOfUnreachableStatesMin = 0;
			int numberOfUnreachableStatesMax = 0;
			int resultNumberOfVariablesMin = -1; // -1, if is not set
			int resultNumberOfVariablesMax = -1; // -1, if is not set
			int resultNumberOfTerminalsMin = -1; // -1, if is not set
			int resultNumberOfTerminalsMax = -1; // -1, if is not set
			int resultNumberOfRulesMin = -1; // -1, if is not set
			int resultNumberOfRulesMax = -1; // -1, if is not set
			int alphabet = this.type2InputAutomatonAlphabetJComboBox.getSelectedIndex();
			int states = this.type2InputAutomatonStatesJComboBox.getSelectedIndex();
			boolean epsilon = this.type2OutputGRammarEpsilonJCheckBox.isSelected();
			try
			{
				numberOfStatesMin = Integer.parseInt(this.type2InputAutomatonStatesMinJTextField.getText());
				numberOfStatesMax = Integer.parseInt(this.type2InputAutomatonStatesMaxJTextField.getText());
				numberOfFinalStatesMin = Integer.parseInt(this.type2InputAutomatonFinalStatesMinJTextField.getText());
				numberOfFinalStatesMax = Integer.parseInt(this.type2InputAutomatonFinalStatesMaxJTextField.getText());
				numberOfTransitionsMin = Integer.parseInt(this.type2InputAutomatonTransitionsMinJTextField.getText());
				numberOfTransitionsMax = Integer.parseInt(this.type2InputAutomatonTransitionsMaxJTextField.getText());
				sizeOfAlphabetMin = Integer.parseInt(this.type2InputAutomatonAlphabetMinJTextField.getText());
				sizeOfAlphabetMax = Integer.parseInt(this.type2InputAutomatonAlphabetMaxJTextField.getText());
				if (!this.type2InputAutomatonUnreachableStatesMinJTextField.getText().isEmpty()
					&& !(this.type2InputAutomatonUnreachableStatesMaxJTextField.getText().isEmpty()))
				{
					numberOfUnreachableStatesMin = Integer
						.parseInt(this.type2InputAutomatonUnreachableStatesMinJTextField.getText());
					numberOfUnreachableStatesMax = Integer
						.parseInt(this.type2InputAutomatonUnreachableStatesMaxJTextField.getText());
					if (numberOfUnreachableStatesMin < 0)
					{
						this.showWarningDialog("The pane Input automaton:\n"
							+ "The fields number of unreachable states min, max\n"
							+ "do not have to be filled or have to be filled " + "with number >= 0.");
						return;
					}
				}
				else
				{
					numberOfUnreachableStatesMax = numberOfStatesMax - 1;
					// if unreachable states min, max is not set ->
					// unreachable states min = 0
					// unreachable states max = (states max - 1)
				}
				if (!this.type2OutputGrammarTerminalsMinJTextField.getText().isEmpty()
					&& !(this.type2OutputGrammarTerminalsMaxJTextField.getText().isEmpty()))
				{
					resultNumberOfTerminalsMin = Integer.parseInt(this.type2OutputGrammarTerminalsMinJTextField
						.getText());
					resultNumberOfTerminalsMax = Integer.parseInt(this.type2OutputGrammarTerminalsMaxJTextField
						.getText());
					if (resultNumberOfTerminalsMin < 0)
					{
						this.showWarningDialog("The pane output grammar:\n" + "The fields number of terminals min, "
							+ "max \n do not have to be filled or have to be filled " + "with number >= 0.");
						return;
					}
					if (resultNumberOfTerminalsMin > sizeOfAlphabetMax)
					{
						this.showWarningDialog("The pane output grammar:\n" + "terminals min > size of alphabet max.");
						return;
					}
				}
				if (!this.type2OutputGrammarVariablesMinJTextField.getText().isEmpty()
					&& !(this.type2OutputGrammarVariablesMaxJTextField.getText().isEmpty()))
				{
					resultNumberOfVariablesMin = Integer.parseInt(this.type2OutputGrammarVariablesMinJTextField
						.getText());
					resultNumberOfVariablesMax = Integer.parseInt(this.type2OutputGrammarVariablesMaxJTextField
						.getText());
					if (resultNumberOfVariablesMin < 1)
					{
						this.showWarningDialog("The pane output grammar:\n"
							+ "The fields number of non-terminals min, max \n"
							+ " do not have to be filled or have to be filled " + "with number >= 1.");
						return;
					}
					if (resultNumberOfVariablesMin > numberOfStatesMax + 1)
					{
						this.showWarningDialog("The pane output grammar:\n"
							+ "non-terminals min > (number of states max + 1).");
						return;
					}
				}
				if (!this.type2OutputGrammarRulesMinJTextField.getText().isEmpty()
					&& !(this.type2OutputGrammarRulesMaxJTextField.getText().isEmpty()))
				{
					resultNumberOfRulesMin = Integer.parseInt(this.type2OutputGrammarRulesMinJTextField.getText());
					resultNumberOfRulesMax = Integer.parseInt(this.type2OutputGrammarRulesMaxJTextField.getText());
					if (resultNumberOfRulesMin < 1)
					{
						this.showWarningDialog("The pane output grammar:\n" + "The fields number of rules min, "
							+ "max \n do not have to be filled or have to be filled " + "with number <= 1.");
						return;
					}
					if (resultNumberOfRulesMax > sizeOfAlphabetMax * numberOfTransitionsMax + 1)
					{
						this.showWarningDialog("The pane output grammar:\n" + "rules max > (size of alphabet max) * "
							+ "(number of transitions max + 1).");
						return;
					}
					if (resultNumberOfRulesMax < numberOfTransitionsMin)
					{
						this.showWarningDialog("The pane output grammar:\n" + "rules min < number of transitions min");
						return;
					}
				}
			}
			catch (NumberFormatException ex)
			{
				this.showWarningDialog("The fields have to be filled with number >= 0.");
				return;
			}
			// check the input
			// automaton
			if ((numberOfStatesMin < 1) || (numberOfStatesMax < 1))
			{
				this.showWarningDialog("The input automaton panel:\n"
					+ "the number of states min, max must be filled with number > 1.");
				return;
			}
			if ((numberOfFinalStatesMin < 0) || (numberOfFinalStatesMax < 0) || (numberOfTransitionsMin < 0)
				|| (numberOfTransitionsMax < 0) || (sizeOfAlphabetMin < 0) || (sizeOfAlphabetMax < 0))
			{
				this.showWarningDialog("The input automaton panel:\n"
					+ "The fields (except number of unreachable states min, "
					+ "max)\nhave to be filled with number >= 0.");
				return;
			}
			if (numberOfStatesMin > numberOfStatesMax)
			{
				this.showWarningDialog("The input automaton panel:\n" + "number of states min > number of states max.");
				return;
			}
			if (numberOfFinalStatesMin > numberOfFinalStatesMax)
			{
				this.showWarningDialog("The input automaton panel:\n"
					+ "number of final states min > number of final states max.");
				return;
			}
			if (numberOfTransitionsMin > numberOfTransitionsMax)
			{
				this.showWarningDialog("The input automaton panel:\n"
					+ "number of transitions min > number of transitions max.");
				return;
			}
			if (sizeOfAlphabetMin > sizeOfAlphabetMax)
			{
				this.showWarningDialog("The input automaton panel:\n" + "size of alphabet min > size of alphabet max.");
				return;
			}
			if (numberOfUnreachableStatesMin > numberOfUnreachableStatesMax)
			{
				this.showWarningDialog("The input automaton panel:\n" + "number of unreachable states min > "
					+ "number of unreachable states max.");
				return;
			}
			if (numberOfFinalStatesMin > numberOfStatesMax)
			{
				this.showWarningDialog("The input automaton panel:\n"
					+ "number of final states min > number of states max.");
				return;
			}
			if (sizeOfAlphabetMin > numberOfTransitionsMax)
			{
				this.showWarningDialog("The input automaton panel:\n"
					+ "size of alphabet min > number of transitions max.");
				return;
			}
			// output grammar
			if (resultNumberOfTerminalsMin > resultNumberOfTerminalsMax)
			{
				this.showWarningDialog("The output regular grammar panel:\n"
					+ "number of terminals min > number of terminals max.");
				return;
			}
			if (resultNumberOfVariablesMin > resultNumberOfVariablesMax)
			{
				this.showWarningDialog("The output regular grammar panel:\n"
					+ "number of non-terminals min > number of non-terminals max.");
				return;
			}
			if (resultNumberOfRulesMin > resultNumberOfRulesMax)
			{
				this.showWarningDialog("The output regular grammar panel:\n"
					+ "number of rules min > number of rules max.");
				return;
			}
			if (resultNumberOfVariablesMin > numberOfStatesMax + 1)
			{
				this.showWarningDialog("The output regular grammar panel:\n"
					+ "number of non-terminals min > number of states max + 1.");
				return;
			}
			(t2 = new T2Generator(this, output, numberOfExercises, numberOfStatesMin, numberOfStatesMax,
				numberOfFinalStatesMin, numberOfFinalStatesMax, numberOfTransitionsMin, numberOfTransitionsMax,
				sizeOfAlphabetMin, sizeOfAlphabetMax, alphabet, states, epsilon, numberOfUnreachableStatesMin,
				numberOfUnreachableStatesMax, resultNumberOfVariablesMin, resultNumberOfVariablesMax,
				resultNumberOfRulesMin, resultNumberOfRulesMax, resultNumberOfTerminalsMin, resultNumberOfTerminalsMax))
				.execute();
		} // REGULAR GRAMMAR -> NFA
		else
		{
			int terminals = 0;
			int variables = 0;
			int numberOfVariablesMin = 0;
			int numberOfVariablesMax = 0;
			int numberOfTerminalsMin = 0;
			int numberOfTerminalsMax = 0;
			int numberOfRulesMin = 0;
			int numberOfRulesMax = 0;
			boolean epsilon = this.type2InputGrammarEpsilonJCheckBox.isSelected();
			// optional attributes
			int resultNumberOfStatesMin = -1; // -1, if is not set
			int resultNumberOfStatesMax = -1; // -1, if is not set
			int resultNumberOfTransitionsMin = -1; // -1, if is not set
			int resultNumberOfTransitionsMax = -1; // -1, if is not set
			int resultSizeOfAlphabetMin = -1; // -1, if is not set
			int resultSizeOfAlphabetMax = -1; // -1, if is not set
			int resultNumberOfUnreachableStatesMin = -1; // -1, if is not set
			int resultNumberOfUnreachableStatesMax = -1; // -1, if is not set
			switch (this.type2InputGrammarTerminalsJComboBox.getSelectedIndex())
			{
				case 0:
					terminals = 0;
					break;
				case 1:
					terminals = 2;
					break;
				case 2:
					terminals = 3;
					break;
				case 3:
					terminals = 5;
					break;
				case 4:
					terminals = 6;
					break;
				case 5:
					terminals = 8;
					break;
				case 6:
					terminals = 9;
					break;
			}
			switch (this.type2InputGrammarVariablesJComboBox.getSelectedIndex())
			{
				case 0:
					variables = 1;
					break;
				case 1:
					variables = 4;
					break;
				case 2:
					variables = 5;
					break;
				case 3:
					variables = 6;
					break;
				case 4:
					variables = 7;
					break;
			}
			try
			{
				numberOfVariablesMin = Integer.parseInt(this.type2InputGrammarVariablesMinJTextField.getText());
				numberOfVariablesMax = Integer.parseInt(this.type2InputGrammarVariablesMaxJTextField.getText());
				numberOfRulesMin = Integer.parseInt(this.type2InputGrammarRulesMinJTextField.getText());
				numberOfRulesMax = Integer.parseInt(this.type2InputGrammarRulesMaxJTextField.getText());
				numberOfTerminalsMin = Integer.parseInt(this.type2InputGrammarTerminalsMinJTextField.getText());
				numberOfTerminalsMax = Integer.parseInt(this.type2InputGrammarTerminalsMaxJTextField.getText());
				if (!this.type2OutputAutomatonStatesMinJTextField.getText().isEmpty()
					&& !(this.type2OutputAutomatonStatesMaxJTextField.getText().isEmpty()))
				{
					resultNumberOfStatesMin = Integer.parseInt(this.type2OutputAutomatonStatesMinJTextField.getText());
					resultNumberOfStatesMax = Integer.parseInt(this.type2OutputAutomatonStatesMaxJTextField.getText());
					if (resultNumberOfStatesMin < 1)
					{
						this.showWarningDialog("The pane output automaton:\n" + "The fields number of states min, "
							+ "max \n do not have to be filled or have to be filled " + "with number >= 1.");
						return;
					}
					if (resultNumberOfStatesMin > numberOfVariablesMax + 1)
					{
						this.showWarningDialog("result number of states min > " + "(number of non-terminals max+1)");
						return;
					}
				}
				if (!this.type2OutputAutomatonTransitionsMinJTextField.getText().isEmpty()
					&& !(this.type2OutputAutomatonTransitionsMaxJTextField.getText().isEmpty()))
				{
					resultNumberOfTransitionsMin = Integer.parseInt(this.type2OutputAutomatonTransitionsMinJTextField
						.getText());
					resultNumberOfTransitionsMax = Integer.parseInt(this.type2OutputAutomatonTransitionsMaxJTextField
						.getText());
					if (resultNumberOfTransitionsMin < 0)
					{
						this.showWarningDialog("The pane output automaton:\n"
							+ "The fields number of transitions min, "
							+ "max \n do not have to be filled or have to be filled " + "with number >= 0.");
						return;
					}
					/*
					 * if(resultNumberOfTransitionsMin>numberOfRulesMax){
					 * this.showWarningDialog("resultNumberOfTransitionsMin>numberOfRulesMax"); return; }
					 */
				}
				if (!this.type2OutputAutomatonAlphabetMinJTextField.getText().isEmpty()
					&& !(this.type2OutputAutomatonAlphabetMaxJTextField.getText().isEmpty()))
				{
					resultSizeOfAlphabetMin = Integer
						.parseInt(this.type2OutputAutomatonAlphabetMinJTextField.getText());
					resultSizeOfAlphabetMax = Integer
						.parseInt(this.type2OutputAutomatonAlphabetMaxJTextField.getText());
					if (resultSizeOfAlphabetMin < 0)
					{
						this.showWarningDialog("The pane output automaton:\n" + "The fields size of alphabet min, "
							+ "max \n do not have to be filled or have to be filled " + "with number >= 0.");
						return;
					}
					if (resultSizeOfAlphabetMin > numberOfTerminalsMax)
					{
						this.showWarningDialog("size of alphabet min > " + "number of terminals max");
						return;
					}
				}
				if (!this.type2OutputAutomatonUnreachableStatesMinJTextField.getText().isEmpty()
					&& !(this.type2OutputAutomatonUnreachableStatesMaxJTextField.getText().isEmpty()))
				{
					resultNumberOfUnreachableStatesMin = Integer
						.parseInt(this.type2OutputAutomatonUnreachableStatesMinJTextField.getText());
					resultNumberOfUnreachableStatesMax = Integer
						.parseInt(this.type2OutputAutomatonUnreachableStatesMaxJTextField.getText());
					if (resultNumberOfUnreachableStatesMin < 0)
					{
						this.showWarningDialog("The pane output automaton:\n"
							+ "The fields number of unreachable states min, "
							+ "max \n do not have to be filled or have to be filled " + "with number >= 0.");
						return;
					}
				}

			}
			catch (NumberFormatException ex)
			{
				this.showWarningDialog("The fields have to be filled with number >= 0.");
				return;
			}
			// check the input
			if (resultNumberOfStatesMin > resultNumberOfStatesMax)
			{
				this.showWarningDialog("The output automaton panel:\n" + "number of states min > number of states max.");
				return;
			}
			if (resultNumberOfTransitionsMin > resultNumberOfTransitionsMax)
			{
				this.showWarningDialog("The output automaton panel:\n"
					+ "number of transitions min > number of transitions max.");
				return;
			}
			if (resultSizeOfAlphabetMin > resultSizeOfAlphabetMax)
			{
				this.showWarningDialog("The output automaton panel:\n" + "size of alphabet min > size of alphabet max.");
				return;
			}
			if (resultSizeOfAlphabetMin > -1 && resultNumberOfTransitionsMax > -1)
				if (resultSizeOfAlphabetMin > resultNumberOfTransitionsMax)
				{
					this.showWarningDialog("The output automaton panel:\n"
						+ "size of alphabet min > number of transitions max.");
					return;
				}
			if ((numberOfVariablesMin < 1) || (numberOfVariablesMax < 1))
			{
				this.showWarningDialog("The input grammar panel:\n"
					+ "The fields number of non-terminals min, max have to be " + "filled with number >= 1.");
				return;
			}
			if ((numberOfRulesMin < 0) || (numberOfRulesMax < 0) || (numberOfTerminalsMin < 0)
				|| (numberOfTerminalsMax < 0))
			{
				this.showWarningDialog("The input grammar panel:\n" + "The fields have to be filled with number >= 0.");
				return;
			}
			if (numberOfTerminalsMin > numberOfTerminalsMax)
			{
				this.showWarningDialog("The input grammar panel:\n"
					+ "number of terminals min > number of terminals max.");
				return;
			}
			if (numberOfVariablesMin > numberOfVariablesMax)
			{
				this.showWarningDialog("The input grammar panel:\n"
					+ "number of non-terminals min > number of non-terminals max.");
				return;
			}
			if (numberOfRulesMin > numberOfRulesMax)
			{
				this.showWarningDialog("The input grammar panel:\n" + "number of rules min > number of rules max.");
				return;
			}
			if (resultNumberOfUnreachableStatesMin > resultNumberOfUnreachableStatesMax)
			{
				this.showWarningDialog("The output automaton panel:\n"
					+ "number of unreachable states min > number of unreachable states max.");
				return;
			}
			(t2 = new T2Generator(this, output, numberOfExercises, numberOfVariablesMin, numberOfVariablesMax,
				numberOfRulesMin, numberOfRulesMax, numberOfTerminalsMin, numberOfTerminalsMax, terminals, variables,
				epsilon, resultNumberOfStatesMin, resultNumberOfStatesMax, resultNumberOfTransitionsMin,
				resultNumberOfTransitionsMax, resultSizeOfAlphabetMin, resultSizeOfAlphabetMax,
				resultNumberOfUnreachableStatesMin, resultNumberOfUnreachableStatesMax)).execute();
		}
	}

	/**
	 * parses the input and make the working thread, which computes the result and prints it into given output
	 * 
	 * @param output
	 *            map; keyset are strings: plainText, plainTextEN, IS, ISEN, latex, latexEN; values the JTextAreas,
	 *            where the result is printed
	 */
	private void getExerciseT3(Map<String, JTextArea> output)
	{
		int numberOfExercises = 0;
		try
		{
			numberOfExercises = Integer.parseInt(this.exercisesJTextField.getText());
		}
		catch (NumberFormatException ex)
		{
			this.showWarningDialog("The generating panel:\n the field "
				+ "number of exercises has to be filled with number > 0.");
			return;
		}
		if (numberOfExercises <= 0)
		{
			this.showWarningDialog("The generating panel:\n the field "
				+ "number of exercises has to be filled with number > 0.");
			return;
		}
		if (numberOfExercises > 500)
		{
			this.showWarningDialog("The generating panel:\n the field "
				+ "number of exercises has to be filled with number <= 500.");
			return;
		}
		this.setProggressBar(numberOfExercises);
		this.setProgress(0);
		// DFA -> RE
		if (this.type3OperationJComboBox.getSelectedIndex() == 0)
		{
			// the input automaton panel
			int sizeOfAlphabetMin = 0;
			int sizeOfAlphabetMax = 0;
			int numberOfStatesMin = 0;
			int numberOfStatesMax = 0;
			int numberOfFinalStatesMin = 0;
			int numberOfFinalStatesMax = 0;
			int numberOfTransitionsMin = 0;
			int numberOfTransitionsMax = 0;
			int alphabet = this.type3InputAutomatonAlphabetJComboBox.getSelectedIndex();
			int states = this.type3InputAutomatonStatesJComboBox.getSelectedIndex();
			// the output automaton regular expression panel
			int lengthMin = -1;// the parameter is not set
			int lengthMax = -1;// the parameter is not set
			int resultSizeOfAlphabetMin = -1;
			int resultSizeOfAlphabetMax = -1;
			try
			{ // the input automaton requierements
				numberOfStatesMin = Integer.parseInt(this.type3InputAutomatonStatesMinJTextField.getText());
				numberOfStatesMax = Integer.parseInt(this.type3InputAutomatonStatesMaxJTextField.getText());
				numberOfFinalStatesMin = Integer.parseInt(this.type3InputAutomatonFinalStatesMinJTextField.getText());
				numberOfFinalStatesMax = Integer.parseInt(this.type3InputAutomatonFinalStatesMaxJTextField.getText());
				numberOfTransitionsMin = Integer.parseInt(this.type3InputAutomatonTransitionsMinJTextField.getText());
				numberOfTransitionsMax = Integer.parseInt(this.type3InputAutomatonTransitionsMaxJTextField.getText());
				sizeOfAlphabetMin = Integer.parseInt(this.type3InputAutomatonAlphabetMinJTextField.getText());
				sizeOfAlphabetMax = Integer.parseInt(this.type3InputAutomatonAlphabetMaxJTextField.getText());

				// the optional output regular expression requierements
				if (!(this.type3OutputREAlphabetMinJTextField.getText().isEmpty())
					&& !(this.type3OutputREAlphabetMaxJTextField.getText().isEmpty()))
				{
					resultSizeOfAlphabetMin = Integer.parseInt(this.type3OutputREAlphabetMinJTextField.getText());
					resultSizeOfAlphabetMax = Integer.parseInt(this.type3OutputREAlphabetMaxJTextField.getText());
					if (resultSizeOfAlphabetMin < 0)
					{
						this.showWarningDialog("The output regular expression "
							+ "panel:\nthe size of alphabet min < 0.");
						return;
					}
				}
				if (!(this.type3OutputRELengthMinJTextField.getText().isEmpty())
					&& !(this.type3OutputRELengthMaxJTextField.getText().isEmpty()))
				{
					lengthMin = Integer.parseInt(this.type3OutputRELengthMinJTextField.getText());
					lengthMax = Integer.parseInt(this.type3OutputRELengthMaxJTextField.getText());
					if (lengthMin <= 0)
					{
						this.showWarningDialog("The output regular expression panel:\n"
							+ "length of the regular expression min <= 0.");
						return;
					}
				}
			}
			catch (NumberFormatException e)
			{
				this.showWarningDialog("The fields have to be filled with number >= 0.\n"
					+ "The green fields need not to be filled or have to be filled " + "with number >= 0.");
				return;
			}
			// check the input
			if ((numberOfStatesMin < 0) || (numberOfStatesMax < 0) || (numberOfFinalStatesMin < 0)
				|| (numberOfFinalStatesMax < 0) || (numberOfTransitionsMin < 0) || (numberOfTransitionsMax < 0)
				|| (sizeOfAlphabetMin < 0) || (sizeOfAlphabetMax < 0))
			{
				this.showWarningDialog("The input automaton panel:\n"
					+ "the fields have to be filled with number >= 0.");
				return;
			}
			if (numberOfStatesMin > numberOfStatesMax)
			{
				this.showWarningDialog("The input automaton panel:\n" + "number of states min > number of states max.");
				return;
			}
			if (numberOfFinalStatesMin > numberOfFinalStatesMax)
			{
				this.showWarningDialog("The input automaton panel:\n"
					+ "number of final states min > number of final states max.");
				return;
			}
			if (numberOfTransitionsMin > numberOfTransitionsMax)
			{
				this.showWarningDialog("The input automaton panel:\n"
					+ "number of transitions min > number of transitions max.");
				return;
			}
			if (sizeOfAlphabetMin > sizeOfAlphabetMax)
			{
				this.showWarningDialog("The input automaton panel:\n" + "size of alphabet min > size of alphabet max.");
				return;
			}
			if (numberOfFinalStatesMin > numberOfStatesMax)
			{
				this.showWarningDialog("The input automaton panel:\n"
					+ "number of final states min > number of states max.");
				return;
			}
			if (sizeOfAlphabetMin > numberOfTransitionsMax)
			{
				this.showWarningDialog("The input automaton panel:\n"
					+ "size of alphabet min > number of transitions max.");
				return;
			}
			if (numberOfTransitionsMin > numberOfStatesMax * numberOfStatesMax * sizeOfAlphabetMax)
			{
				this.showWarningDialog("The input automaton panel:\n" + "number of transitions min > "
					+ "(number of states max)^2 * (size of alphabet max).");
				return;
			}
			if (resultSizeOfAlphabetMin > resultSizeOfAlphabetMax)
			{
				this.showWarningDialog("The output regular expression panel:\n"
					+ "size of alphabet min > size of alphabet max.");
				return;
			}
			if (resultSizeOfAlphabetMin > sizeOfAlphabetMax)
			{
				this.showWarningDialog("Output size of alphabet min > " + "input size of alphabet max.");
				return;
			}
			if (lengthMin > lengthMax)
			{
				this.showWarningDialog("The output regular expression panel:\n" + "length of regular expression min > "
					+ "length of regular expression max.");
			}
			if (lengthMin > -1 && resultSizeOfAlphabetMax > -1)
			{
				if (resultSizeOfAlphabetMax == 0 && lengthMin > 1)
				{
					this.showWarningDialog("The output regular expression panel:\n"
						+ "size of alphabet max == 0 && (length min > 1).");
					return;
				}
			}
			(t3 = new T3Generator(this, output, numberOfExercises, alphabet, states, sizeOfAlphabetMin,
				sizeOfAlphabetMax, numberOfStatesMin, numberOfStatesMax, numberOfFinalStatesMin,
				numberOfFinalStatesMax, numberOfTransitionsMin, numberOfTransitionsMax, resultSizeOfAlphabetMin,
				resultSizeOfAlphabetMax, lengthMin, lengthMax)).execute();
		}
		// RE -> NFA
		else
		{
			int sizeOfAlphabetMin = 0;
			int sizeOfAlphabetMax = 0;
			int alphabet = this.type3InputReAlphabetJComboBox.getSelectedIndex();
			int states = this.type3OutputAutomatonStatesJComboBox.getSelectedIndex();
			int resultNumberOfStatesMin = 0;
			int resultNumberOfStatesMax = 0;
			int resultNumberOfTransitionsMin = 0;
			int resultNumberOfTransitionsMax = 0;
			// the optional requirements are -1 (not set)
			int lengthMin = -1;
			int lengthMax = -1;
			try
			{
				// input regular expression requierements
				sizeOfAlphabetMin = Integer.parseInt(this.type3InputREAlphabetMinJTextField.getText());
				sizeOfAlphabetMax = Integer.parseInt(this.type3InputREAlphabetMaxJTextField.getText());
				// optional input regular expression requierements
				if (!(this.type3InputRELengthMinJTextField.getText().isEmpty())
					&& !(this.type3InputRELengthMaxJTextField.getText().isEmpty()))
				{
					lengthMin = Integer.parseInt(this.type3InputRELengthMinJTextField.getText());
					lengthMax = Integer.parseInt(this.type3InputRELengthMaxJTextField.getText());
					if (lengthMin < 0)
					{
						this.showWarningDialog("The input regular expression panel:\n"
							+ "length of the regular expression min < 0.");
						return;
					}
				}
				resultNumberOfTransitionsMin = Integer.parseInt(this.type3OutputAutomatonTransitionsMinJTextField
					.getText());
				resultNumberOfTransitionsMax = Integer.parseInt(this.type3OutputAutomatonTransitionsMaxJTextField
					.getText());
				resultNumberOfStatesMin = Integer.parseInt(this.type3OutputAutomatonStatesMinJTextField.getText());
				resultNumberOfStatesMax = Integer.parseInt(this.type3OutputAutomatonStatesMaxJTextField.getText());
			}
			catch (NumberFormatException e)
			{
				this.showWarningDialog("The fields have to be filled with "
					+ "number >= 0.\nThe green fields need not to be filled "
					+ "or have to be filled with number >= 0.");
				return;
			}
			// check input
			if (sizeOfAlphabetMin < 0 || sizeOfAlphabetMax < 0)
			{
				this.showWarningDialog("The input regular expression panel:\n"
					+ "the fields have to be filled with number >= 0.");
			}
			if (lengthMin > lengthMax)
			{
				this.showWarningDialog("The input regular expression panel:\n" + "length of regular expression min > "
					+ "length of regular expression max.");
			}
			if (resultNumberOfStatesMin > resultNumberOfStatesMax)
			{
				this.showWarningDialog("The output automaton panel:\n" + "number of states min > number of states max.");
				return;
			}
			if (resultNumberOfTransitionsMin > resultNumberOfTransitionsMax)
			{
				this.showWarningDialog("The output automaton panel:\n"
					+ "number of transitions min > number of transitions max.");
				return;
			}
			if (sizeOfAlphabetMin > sizeOfAlphabetMax)
			{
				this.showWarningDialog("The input regular expression panel:\n"
					+ "size of alphabet min > size of alphabet max.");
				return;
			}
			if (sizeOfAlphabetMin > resultNumberOfTransitionsMax)
			{
				this.showWarningDialog("The onput automaton panel:\n"
					+ "size of alphabet min > number of transitions max.");
				return;
			}
			if (resultNumberOfTransitionsMin > resultNumberOfStatesMax * resultNumberOfStatesMax * sizeOfAlphabetMax)
			{
				this.showWarningDialog("The output automaton panel:\n" + "number of transitions min > "
					+ "(number of states max)^2 * (size of alphabet max).");
				return;
			}
			if (sizeOfAlphabetMin > resultNumberOfTransitionsMax)
			{
				this.showWarningDialog("alphabetSize_min > numberOfTransitions_max");
			}
			if (resultNumberOfTransitionsMin > resultNumberOfStatesMax * resultNumberOfStatesMax
				* (sizeOfAlphabetMax + 1))
			{
				this.showWarningDialog("numberOfTransitions_min > numberOfStates_max*numberOfStates_max*(alphabetSize_max+ 1)");
			}
			if (resultNumberOfStatesMin < 2)
			{
				this.showWarningDialog("The output automaton panel:\n" + "number of states min < 2");
				return;
			}
			(t3 = new T3Generator(this, output, numberOfExercises, alphabet, states, sizeOfAlphabetMin,
				sizeOfAlphabetMax, lengthMin, lengthMax, resultNumberOfStatesMin, resultNumberOfStatesMax,
				resultNumberOfTransitionsMin, resultNumberOfTransitionsMax)).execute();
		}
	}

	/**
	 * shows the the error dialog pane, if the error occures
	 * 
	 * @param message
	 *            the cause of the error
	 */
	private void showErrorDialog(String message)
	{
		javax.swing.JOptionPane.showMessageDialog(this, message, "Error", JOptionPane.ERROR_MESSAGE);
		this.resetStopGenerateButtons();
	}

	/**
	 * shows the warning dialog pane and resets the stop and generate button
	 * 
	 * @param message
	 *            the cause of the proposition
	 */
	private void showWarningDialog(String message)
	{
		javax.swing.JOptionPane.showMessageDialog(this, message, "Warning", JOptionPane.WARNING_MESSAGE);
		this.resetStopGenerateButtons();
	}

	/**
	 * Enables or disables operation ComboBoxes, depending on the value of the parameter b. An enabled component can
	 * respond to user input Components are disabled initially by default.
	 * 
	 * @param enabled
	 *            If true, this component is enabled; otherwise this component is disabled.
	 */
	private void setSelectedPanelEnabled(boolean enabled)
	{
		int i = this.typeJComboBox.getSelectedIndex();
		this.typeJComboBox.setEnabled(enabled);
		switch (i)
		{
			case 0:
				this.type0OperationJComboBox.setEnabled(enabled);
				break;
			case 1:
				this.type1OperationFromJComboBox.setEnabled(enabled);
				this.type1OperationToJComboBox.setEnabled(enabled);
				break;
			case 2:
				this.type2OperationJComboBox.setEnabled(enabled);
				break;
			case 3:
				this.type3OperationJComboBox.setEnabled(enabled);
				break;
		}
	}

	private JTextArea getSelectedArea()
	{
		int i = this.outputJTabbedPane.getSelectedIndex();
		switch (i)
		{
			case 0:
				return this.plainTextJTextArea;
			case 1:
				return this.latexJTextArea;
			case 2:
				return this.isJTextArea;
			case 3:
				return this.plainTextENJTextArea;
			case 4:
				return this.latexENJTextArea;
			default:
				return this.isENJTextArea;
		}
	}

	/**
	 * @param args
	 *            the command line arguments
	 */
	public static void main(String args[])
	{
		java.awt.EventQueue.invokeLater(new Runnable()
		{
			public void run()
			{
				new ExerciseGeneratorGUI().setVisible(true);
			}
		});
	}

	// Variables declaration - do not modify//GEN-BEGIN:variables
	private javax.swing.JLabel completedExercisesJLabel;
	private javax.swing.JButton copyAllJButton;
	private javax.swing.JButton copyJButton;
	private javax.swing.JLabel exercisesJLabel;
	private javax.swing.JTextField exercisesJTextField;
	private javax.swing.JButton generateJButton;
	private javax.swing.JPanel generatingJPanel;
	private javax.swing.JScrollPane isENJScrollPane;
	private javax.swing.JTextArea isENJTextArea;
	private javax.swing.JScrollPane isJScrollPane;
	private javax.swing.JTextArea isJTextArea;
	private javax.swing.JProgressBar jProgressBar;
	private javax.swing.JScrollPane latexENJScrollPane;
	private javax.swing.JTextArea latexENJTextArea;
	private javax.swing.JScrollPane latexJScrollPane;
	private javax.swing.JTextArea latexJTextArea;
	private javax.swing.JTabbedPane outputJTabbedPane;
	private javax.swing.JScrollPane plainTextENJScrollPane;
	private javax.swing.JTextArea plainTextENJTextArea;
	private javax.swing.JScrollPane plainTextJScrollPane;
	private javax.swing.JTextArea plainTextJTextArea;
	private javax.swing.JLabel progressJLabel;
	private javax.swing.JButton saveAllJButton;
	private javax.swing.JButton saveJButton;
	private javax.swing.JButton stopJButton;
	private javax.swing.JComboBox type0AlphabetJComboBox;
	private javax.swing.JLabel type0Automaton1AlphabetJLabel;
	private javax.swing.JLabel type0Automaton1AlphabetMaxJLabel;
	private javax.swing.JTextField type0Automaton1AlphabetMaxJTextField;
	private javax.swing.JLabel type0Automaton1AlphabetMinJLabel;
	private javax.swing.JTextField type0Automaton1AlphabetMinJTextField;
	private javax.swing.JRadioButton type0Automaton1CoJRadioButton;
	private javax.swing.JLabel type0Automaton1FinalStatesJLabel;
	private javax.swing.JLabel type0Automaton1FinalStatesMaxJLabel;
	private javax.swing.JTextField type0Automaton1FinalStatesMaxJTextField;
	private javax.swing.JLabel type0Automaton1FinalStatesMinJLabel;
	private javax.swing.JTextField type0Automaton1FinalStatesMinJTextField;
	private javax.swing.JPanel type0Automaton1JPanel;
	private javax.swing.JRadioButton type0Automaton1JRadioButton;
	private javax.swing.JComboBox type0Automaton1StatesJComboBox;
	private javax.swing.JLabel type0Automaton1StatesJLabel;
	private javax.swing.JLabel type0Automaton1StatesMaxJLabel;
	private javax.swing.JTextField type0Automaton1StatesMaxJTextField;
	private javax.swing.JLabel type0Automaton1StatesMinJLabel;
	private javax.swing.JTextField type0Automaton1StatesMinJTextField;
	private javax.swing.JCheckBox type0Automaton1TotalTransitionFunctionJCheckBox;
	private javax.swing.JLabel type0Automaton1TransitionsJLabel;
	private javax.swing.JLabel type0Automaton1TransitionsMaxJLabel;
	private javax.swing.JTextField type0Automaton1TransitionsMaxJTextField;
	private javax.swing.JLabel type0Automaton1TransitionsMinJLabel;
	private javax.swing.JTextField type0Automaton1TransitionsMinJTextField;
	private javax.swing.ButtonGroup type0Automaton1buttonGroup;
	private javax.swing.JRadioButton type0Automaton2CoJRadioButton;
	private javax.swing.JLabel type0Automaton2FinalStatesJLabel;
	private javax.swing.JLabel type0Automaton2FinalStatesMaxJLabel;
	private javax.swing.JTextField type0Automaton2FinalStatesMaxJTextField;
	private javax.swing.JLabel type0Automaton2FinalStatesMinJLabel;
	private javax.swing.JTextField type0Automaton2FinalStatesMinJTextField;
	private javax.swing.JPanel type0Automaton2JPanel;
	private javax.swing.JRadioButton type0Automaton2JRadioButton;
	private javax.swing.JComboBox type0Automaton2StatesJComboBox;
	private javax.swing.JLabel type0Automaton2StatesJLabel;
	private javax.swing.JLabel type0Automaton2StatesMaxJLabel;
	private javax.swing.JTextField type0Automaton2StatesMaxJTextField;
	private javax.swing.JLabel type0Automaton2StatesMinJLabel;
	private javax.swing.JTextField type0Automaton2StatesMinJTextField;
	private javax.swing.JCheckBox type0Automaton2TotalTransitionFunctionJCheckBox;
	private javax.swing.JLabel type0Automaton2TransitionsJLabel;
	private javax.swing.JLabel type0Automaton2TransitionsMaxJLabel;
	private javax.swing.JTextField type0Automaton2TransitionsMaxJTextField;
	private javax.swing.JLabel type0Automaton2TransitionsMinJLabel;
	private javax.swing.JTextField type0Automaton2TransitionsMinJTextField;
	private javax.swing.ButtonGroup type0Automaton2buttonGroup;
	private javax.swing.JPanel type0JPanel;
	private javax.swing.JComboBox type0OperationJComboBox;
	private javax.swing.JPanel type0OperationJPanel;
	private javax.swing.JPanel type0OutputAutomatonJPanel;
	private javax.swing.JCheckBox type0OutputAutomatonMinOneFinalStateJCheckBox;
	private javax.swing.JLabel type0OutputAutomatonStatesJLabel;
	private javax.swing.JLabel type0OutputAutomatonStatesMaxJLabel;
	private javax.swing.JTextField type0OutputAutomatonStatesMaxJTextField;
	private javax.swing.JLabel type0OutputAutomatonStatesMinJLabel;
	private javax.swing.JTextField type0OutputAutomatonStatesMinJTextField;
	private javax.swing.JLabel type0OutputAutomatonTransitionsJLabel;
	private javax.swing.JLabel type0OutputAutomatonTransitionsMaxJLabel;
	private javax.swing.JTextField type0OutputAutomatonTransitionsMaxJTextField;
	private javax.swing.JLabel type0OutputAutomatonTransitionsMinJLabel;
	private javax.swing.JTextField type0OutputAutomatonTransitionsMinJTextField;
	private javax.swing.JPanel type1InputAutomantonJPanel;
	private javax.swing.JComboBox type1InputAutomatonAlphabetJComboBox;
	private javax.swing.JLabel type1InputAutomatonAlphabetJLabel;
	private javax.swing.JLabel type1InputAutomatonAlphabetMaxJLabel;
	private javax.swing.JTextField type1InputAutomatonAlphabetMaxJTextField;
	private javax.swing.JLabel type1InputAutomatonAlphabetMinJLabel;
	private javax.swing.JTextField type1InputAutomatonAlphabetMinJTextField;
	private javax.swing.JLabel type1InputAutomatonFinalStatesJLabel;
	private javax.swing.JLabel type1InputAutomatonFinalStatesMaxJLabel;
	private javax.swing.JTextField type1InputAutomatonFinalStatesMaxJTextField;
	private javax.swing.JLabel type1InputAutomatonFinalStatesMinJLabel;
	private javax.swing.JTextField type1InputAutomatonFinalStatesMinJTextField;
	private javax.swing.JCheckBox type1InputAutomatonFirstStateJCheckBox;
	private javax.swing.JComboBox type1InputAutomatonStatesJComboBox;
	private javax.swing.JLabel type1InputAutomatonStatesJLabel;
	private javax.swing.JLabel type1InputAutomatonStatesMaxJLabel;
	private javax.swing.JTextField type1InputAutomatonStatesMaxJTextField;
	private javax.swing.JLabel type1InputAutomatonStatesMinJLabel;
	private javax.swing.JTextField type1InputAutomatonStatesMinJTextField;
	private javax.swing.JCheckBox type1InputAutomatonTotalTransitionFunctionJCheckBox;
	private javax.swing.JLabel type1InputAutomatonTransitionsJLabel;
	private javax.swing.JLabel type1InputAutomatonTransitionsMaxJLabel;
	private javax.swing.JTextField type1InputAutomatonTransitionsMaxJTextField;
	private javax.swing.JLabel type1InputAutomatonTransitionsMinJLabel;
	private javax.swing.JTextField type1InputAutomatonTransitionsMinJTextField;
	private javax.swing.JLabel type1InputAutomatonUnreachableStates1JLabel;
	private javax.swing.JLabel type1InputAutomatonUnreachableStates2jLabel;
	private javax.swing.JLabel type1InputAutomatonUnreachableStatesMaxJLabel;
	private javax.swing.JTextField type1InputAutomatonUnreachableStatesMaxJTextField;
	private javax.swing.JLabel type1InputAutomatonUnreachableStatesMinJLabel;
	private javax.swing.JTextField type1InputAutomatonUnreachableStatesMinJTextField;
	private javax.swing.JPanel type1JPanel;
	private javax.swing.JPanel type1MinimizationJPanel;
	private javax.swing.JCheckBox type1MinimizationStepsJCheckBox;
	private javax.swing.JLabel type1MinimizationStepsJLabel;
	private javax.swing.JLabel type1MinimizationStepsMaxJLabel;
	private javax.swing.JTextField type1MinimizationStepsMaxJTextField;
	private javax.swing.JLabel type1MinimizationStepsMinJLabel;
	private javax.swing.JTextField type1MinimizationStepsMinJTextField;
	private javax.swing.JComboBox type1OperationFromJComboBox;
	private javax.swing.JLabel type1OperationFromJLabel;
	private javax.swing.JPanel type1OperationJPanel;
	private javax.swing.JComboBox type1OperationToJComboBox;
	private javax.swing.JLabel type1OperationToJLabel;
	private javax.swing.JPanel type1OutputAutomatonJPanel;
	private javax.swing.JLabel type1OutputAutomatonStatesJLabel;
	private javax.swing.JLabel type1OutputAutomatonStatesMaxJLabel;
	private javax.swing.JTextField type1OutputAutomatonStatesMaxJTextField;
	private javax.swing.JLabel type1OutputAutomatonStatesMinJLabel;
	private javax.swing.JTextField type1OutputAutomatonStatesMinJTextField;
	private javax.swing.JLabel type1OutputAutomatonTransitionsJLabel;
	private javax.swing.JLabel type1OutputAutomatonTransitionsMaxJLabel;
	private javax.swing.JTextField type1OutputAutomatonTransitionsMaxJTextField;
	private javax.swing.JLabel type1OutputAutomatonTransitionsMinJLabel;
	private javax.swing.JTextField type1OutputAutomatonTransitionsMinJTextField;
	private javax.swing.JComboBox type2InputAutomatonAlphabetJComboBox;
	private javax.swing.JLabel type2InputAutomatonAlphabetJLabel;
	private javax.swing.JLabel type2InputAutomatonAlphabetMaxJLabel;
	private javax.swing.JTextField type2InputAutomatonAlphabetMaxJTextField;
	private javax.swing.JLabel type2InputAutomatonAlphabetMinJLabel;
	private javax.swing.JTextField type2InputAutomatonAlphabetMinJTextField;
	private javax.swing.JLabel type2InputAutomatonFinalStatesJLabel;
	private javax.swing.JLabel type2InputAutomatonFinalStatesMaxJLabel;
	private javax.swing.JTextField type2InputAutomatonFinalStatesMaxJTextField;
	private javax.swing.JLabel type2InputAutomatonFinalStatesMinJLabel;
	private javax.swing.JTextField type2InputAutomatonFinalStatesMinJTextField;
	private javax.swing.JPanel type2InputAutomatonJPanel;
	private javax.swing.JComboBox type2InputAutomatonStatesJComboBox;
	private javax.swing.JLabel type2InputAutomatonStatesJLabel;
	private javax.swing.JLabel type2InputAutomatonStatesMaxJLabel;
	private javax.swing.JTextField type2InputAutomatonStatesMaxJTextField;
	private javax.swing.JLabel type2InputAutomatonStatesMinJLabel;
	private javax.swing.JTextField type2InputAutomatonStatesMinJTextField;
	private javax.swing.JLabel type2InputAutomatonTransitionsJLabel;
	private javax.swing.JLabel type2InputAutomatonTransitionsMaxJLabel;
	private javax.swing.JTextField type2InputAutomatonTransitionsMaxJTextField;
	private javax.swing.JLabel type2InputAutomatonTransitionsMinJLabel;
	private javax.swing.JTextField type2InputAutomatonTransitionsMinJTextField;
	private javax.swing.JLabel type2InputAutomatonUnreachableStates1JLabel;
	private javax.swing.JLabel type2InputAutomatonUnreachableStates2JLabel;
	private javax.swing.JLabel type2InputAutomatonUnreachableStatesMaxJLabel;
	private javax.swing.JTextField type2InputAutomatonUnreachableStatesMaxJTextField;
	private javax.swing.JLabel type2InputAutomatonUnreachableStatesMinJLabel;
	private javax.swing.JTextField type2InputAutomatonUnreachableStatesMinJTextField;
	private javax.swing.JCheckBox type2InputGrammarEpsilonJCheckBox;
	private javax.swing.JPanel type2InputGrammarJPanel;
	private javax.swing.JLabel type2InputGrammarRulesJLabel;
	private javax.swing.JLabel type2InputGrammarRulesMaxJLabel;
	private javax.swing.JTextField type2InputGrammarRulesMaxJTextField;
	private javax.swing.JLabel type2InputGrammarRulesMinJLabel;
	private javax.swing.JTextField type2InputGrammarRulesMinJTextField;
	private javax.swing.JComboBox type2InputGrammarTerminalsJComboBox;
	private javax.swing.JLabel type2InputGrammarTerminalsJLabel;
	private javax.swing.JLabel type2InputGrammarTerminalsMaxJLabel;
	private javax.swing.JTextField type2InputGrammarTerminalsMaxJTextField;
	private javax.swing.JLabel type2InputGrammarTerminalsMinJLabel;
	private javax.swing.JTextField type2InputGrammarTerminalsMinJTextField;
	private javax.swing.JComboBox type2InputGrammarVariablesJComboBox;
	private javax.swing.JLabel type2InputGrammarVariablesJLabel;
	private javax.swing.JLabel type2InputGrammarVariablesMaxJLabel;
	private javax.swing.JTextField type2InputGrammarVariablesMaxJTextField;
	private javax.swing.JLabel type2InputGrammarVariablesMinJLabel;
	private javax.swing.JTextField type2InputGrammarVariablesMinJTextField;
	private javax.swing.JLayeredPane type2JLayeredPane;
	private javax.swing.JPanel type2JPanel;
	private javax.swing.JComboBox type2OperationJComboBox;
	private javax.swing.JLabel type2OperationJLabel;
	private javax.swing.JLabel type2OutputAutomatonAlphabetJLabel;
	private javax.swing.JLabel type2OutputAutomatonAlphabetMaxJLabel;
	private javax.swing.JTextField type2OutputAutomatonAlphabetMaxJTextField;
	private javax.swing.JLabel type2OutputAutomatonAlphabetMinJLabel;
	private javax.swing.JTextField type2OutputAutomatonAlphabetMinJTextField;
	private javax.swing.JPanel type2OutputAutomatonJPanel;
	private javax.swing.JLabel type2OutputAutomatonStatesJLabel;
	private javax.swing.JLabel type2OutputAutomatonStatesMaxJLabel;
	private javax.swing.JTextField type2OutputAutomatonStatesMaxJTextField;
	private javax.swing.JLabel type2OutputAutomatonStatesMinJLabel;
	private javax.swing.JTextField type2OutputAutomatonStatesMinJTextField;
	private javax.swing.JLabel type2OutputAutomatonTransitionsJLabel;
	private javax.swing.JLabel type2OutputAutomatonTransitionsMaxJLabel;
	private javax.swing.JTextField type2OutputAutomatonTransitionsMaxJTextField;
	private javax.swing.JLabel type2OutputAutomatonTransitionsMinJLabel;
	private javax.swing.JTextField type2OutputAutomatonTransitionsMinJTextField;
	private javax.swing.JLabel type2OutputAutomatonUnreachableStates1JLabel;
	private javax.swing.JLabel type2OutputAutomatonUnreachableStates2JLabel;
	private javax.swing.JLabel type2OutputAutomatonUnreachableStatesMaxJLabel;
	private javax.swing.JTextField type2OutputAutomatonUnreachableStatesMaxJTextField;
	private javax.swing.JLabel type2OutputAutomatonUnreachableStatesMinJLabel;
	private javax.swing.JTextField type2OutputAutomatonUnreachableStatesMinJTextField;
	private javax.swing.JCheckBox type2OutputGRammarEpsilonJCheckBox;
	private javax.swing.JPanel type2OutputGrammarJPanel;
	private javax.swing.JLabel type2OutputGrammarRulesJLabel;
	private javax.swing.JLabel type2OutputGrammarRulesMaxJLabel;
	private javax.swing.JTextField type2OutputGrammarRulesMaxJTextField;
	private javax.swing.JLabel type2OutputGrammarRulesMinJLabel;
	private javax.swing.JTextField type2OutputGrammarRulesMinJTextField;
	private javax.swing.JLabel type2OutputGrammarTerminalsJLabel;
	private javax.swing.JLabel type2OutputGrammarTerminalsMaxJLabel;
	private javax.swing.JTextField type2OutputGrammarTerminalsMaxJTextField;
	private javax.swing.JLabel type2OutputGrammarTerminalsMinJLabel;
	private javax.swing.JTextField type2OutputGrammarTerminalsMinJTextField;
	private javax.swing.JLabel type2OutputGrammarVariablesJLabel;
	private javax.swing.JLabel type2OutputGrammarVariablesMaxJLabel;
	private javax.swing.JTextField type2OutputGrammarVariablesMaxJTextField;
	private javax.swing.JLabel type2OutputGrammarVariablesMinJLabel;
	private javax.swing.JTextField type2OutputGrammarVariablesMinJTextField;
	private javax.swing.JComboBox type3InputAutomatonAlphabetJComboBox;
	private javax.swing.JLabel type3InputAutomatonAlphabetJLabel;
	private javax.swing.JLabel type3InputAutomatonAlphabetMaxJLabel;
	private javax.swing.JTextField type3InputAutomatonAlphabetMaxJTextField;
	private javax.swing.JLabel type3InputAutomatonAlphabetMinJLabel;
	private javax.swing.JTextField type3InputAutomatonAlphabetMinJTextField;
	private javax.swing.JLabel type3InputAutomatonFinalStatesJLabel;
	private javax.swing.JLabel type3InputAutomatonFinalStatesMaxJLabel;
	private javax.swing.JTextField type3InputAutomatonFinalStatesMaxJTextField;
	private javax.swing.JLabel type3InputAutomatonFinalStatesMinJLabel;
	private javax.swing.JTextField type3InputAutomatonFinalStatesMinJTextField;
	private javax.swing.JPanel type3InputAutomatonJPanel;
	private javax.swing.JComboBox type3InputAutomatonStatesJComboBox;
	private javax.swing.JLabel type3InputAutomatonStatesJLabel;
	private javax.swing.JLabel type3InputAutomatonStatesMaxJLabel;
	private javax.swing.JTextField type3InputAutomatonStatesMaxJTextField;
	private javax.swing.JLabel type3InputAutomatonStatesMinJLabel;
	private javax.swing.JTextField type3InputAutomatonStatesMinJTextField;
	private javax.swing.JLabel type3InputAutomatonTransitionsJLabel;
	private javax.swing.JLabel type3InputAutomatonTransitionsMaxJLabel;
	private javax.swing.JTextField type3InputAutomatonTransitionsMaxJTextField;
	private javax.swing.JLabel type3InputAutomatonTransitionsMinJLabel;
	private javax.swing.JTextField type3InputAutomatonTransitionsMinJTextField;
	private javax.swing.JLabel type3InputREAlphabetJLabel;
	private javax.swing.JLabel type3InputREAlphabetMaxJLabel;
	private javax.swing.JTextField type3InputREAlphabetMaxJTextField;
	private javax.swing.JLabel type3InputREAlphabetMinJLabel;
	private javax.swing.JTextField type3InputREAlphabetMinJTextField;
	private javax.swing.JPanel type3InputREJPanel;
	private javax.swing.JLabel type3InputRELengthJLabel;
	private javax.swing.JLabel type3InputRELengthMaxJLabel;
	private javax.swing.JTextField type3InputRELengthMaxJTextField;
	private javax.swing.JLabel type3InputRELengthMinJLabel;
	private javax.swing.JTextField type3InputRELengthMinJTextField;
	private javax.swing.JComboBox type3InputReAlphabetJComboBox;
	private javax.swing.JPanel type3JPanel;
	private javax.swing.JComboBox type3OperationJComboBox;
	private javax.swing.JLabel type3OperationJLabel;
	private javax.swing.JPanel type3OutputAutomatonJPanel;
	private javax.swing.JComboBox type3OutputAutomatonStatesJComboBox;
	private javax.swing.JLabel type3OutputAutomatonStatesJLabel;
	private javax.swing.JLabel type3OutputAutomatonStatesMaxJLabel;
	private javax.swing.JTextField type3OutputAutomatonStatesMaxJTextField;
	private javax.swing.JLabel type3OutputAutomatonStatesMinJLabel;
	private javax.swing.JTextField type3OutputAutomatonStatesMinJTextField;
	private javax.swing.JLabel type3OutputAutomatonTransitionsJLabel;
	private javax.swing.JLabel type3OutputAutomatonTransitionsMaxJLabel;
	private javax.swing.JTextField type3OutputAutomatonTransitionsMaxJTextField;
	private javax.swing.JLabel type3OutputAutomatonTransitionsMinJLabel;
	private javax.swing.JTextField type3OutputAutomatonTransitionsMinJTextField;
	private javax.swing.JLabel type3OutputREAlphabetJLabel;
	private javax.swing.JLabel type3OutputREAlphabetMaxJLabel;
	private javax.swing.JTextField type3OutputREAlphabetMaxJTextField;
	private javax.swing.JLabel type3OutputREAlphabetMinJLabel;
	private javax.swing.JTextField type3OutputREAlphabetMinJTextField;
	private javax.swing.JPanel type3OutputREJPanel;
	private javax.swing.JLabel type3OutputRELengthJLabel;
	private javax.swing.JLabel type3OutputRELengthMaxJLabel;
	private javax.swing.JTextField type3OutputRELengthMaxJTextField;
	private javax.swing.JLabel type3OutputRELengthMinJLabel;
	private javax.swing.JTextField type3OutputRELengthMinJTextField;
	private javax.swing.JLayeredPane type3jLayeredPane;
	private javax.swing.JComboBox typeJComboBox;
	private javax.swing.JLayeredPane typeJLayeredPane;
	// End of variables declaration//GEN-END:variables

}
